rag-wright 0.16.1__tar.gz → 0.17.1__tar.gz

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.
Files changed (1111) hide show
  1. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +12 -4
  2. rag_wright-0.17.1/.release-please-manifest.json +3 -0
  3. {rag_wright-0.16.1 → rag_wright-0.17.1}/CHANGELOG.md +20 -0
  4. {rag_wright-0.16.1 → rag_wright-0.17.1}/CLAUDE.md +11 -1
  5. {rag_wright-0.16.1 → rag_wright-0.17.1}/PKG-INFO +1 -1
  6. rag_wright-0.17.1/docs/adr/0141-the-hard-split-cuts-between-lines-and-repeats-a-tables-header.md +38 -0
  7. rag_wright-0.17.1/docs/adr/0142-the-default-writer-keeps-one-edge-per-type-and-endpoints.md +32 -0
  8. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/README.md +3 -1
  9. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/api/README.md +4 -4
  10. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/api/pack_sdk.md +5 -1
  11. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/_engine-gaps.md +10 -7
  12. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/kg-construction.md +23 -6
  13. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/plan.md +4 -0
  14. {rag_wright-0.16.1 → rag_wright-0.17.1}/pyproject.toml +1 -1
  15. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +12 -4
  16. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/kg.py +4 -3
  17. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_chunking.py +71 -4
  18. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/builder.py +50 -7
  19. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/layout.py +5 -2
  20. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/pack_sdk/__init__.py +4 -1
  21. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/store/arcadedb.py +18 -4
  22. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/store/seam.py +5 -2
  23. {rag_wright-0.16.1 → rag_wright-0.17.1}/tasks.md +5 -1
  24. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_kg.py +1 -1
  25. rag_wright-0.17.1/tests/api/test_pack_sdk_segmenter.py +42 -0
  26. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity.json +36 -18
  27. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_builder.py +1 -1
  28. rag_wright-0.17.1/tests/ingestion/test_default_writer_ensures_edges.py +33 -0
  29. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_graph_parity.py +1 -1
  30. rag_wright-0.17.1/tests/ingestion/test_split_tables.py +132 -0
  31. rag_wright-0.17.1/tests/ingestion/test_unreached_rows.py +73 -0
  32. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_write_count.py +1 -1
  33. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_schema.py +1 -1
  34. rag_wright-0.17.1/tests/store/test_kg_write_ensure_edges.py +142 -0
  35. {rag_wright-0.16.1 → rag_wright-0.17.1}/uv.lock +1 -1
  36. rag_wright-0.16.1/.release-please-manifest.json +0 -3
  37. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/settings.json +0 -0
  38. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  39. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
  40. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
  41. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
  42. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
  43. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
  44. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
  45. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  46. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/creating-evals/SKILL.md +0 -0
  47. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/laya/SKILL.md +0 -0
  48. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  49. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  50. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  51. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/setfit/SKILL.md +0 -0
  52. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
  53. {rag_wright-0.16.1 → rag_wright-0.17.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
  54. {rag_wright-0.16.1 → rag_wright-0.17.1}/.env.example +0 -0
  55. {rag_wright-0.16.1 → rag_wright-0.17.1}/.github/workflows/publish.yml +0 -0
  56. {rag_wright-0.16.1 → rag_wright-0.17.1}/.github/workflows/release-please.yml +0 -0
  57. {rag_wright-0.16.1 → rag_wright-0.17.1}/.gitignore +0 -0
  58. {rag_wright-0.16.1 → rag_wright-0.17.1}/LICENSE +0 -0
  59. {rag_wright-0.16.1 → rag_wright-0.17.1}/README.md +0 -0
  60. {rag_wright-0.16.1 → rag_wright-0.17.1}/SPEC.md +0 -0
  61. {rag_wright-0.16.1 → rag_wright-0.17.1}/conftest.py +0 -0
  62. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  63. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/ArcadeDB_Local.md +0 -0
  64. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/OBSERVABILITY.md +0 -0
  65. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
  66. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  67. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  68. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0004-entity-disambiguation.md +0 -0
  69. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0005-relational-golden-set.md +0 -0
  70. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0006-model-profile.md +0 -0
  71. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  72. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  73. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  74. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  75. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  76. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  77. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  78. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  79. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  80. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  81. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  82. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  83. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  84. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  85. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  86. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  87. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  88. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  89. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  90. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  91. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  92. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  93. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  94. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  95. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  96. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  97. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  98. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  99. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  100. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  101. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  102. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  103. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  104. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  105. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  106. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  107. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  108. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  109. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  110. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  111. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  112. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  113. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  114. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  115. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  116. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  117. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  118. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  119. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
  120. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  121. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0057-async-engine-architecture.md +0 -0
  122. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0058-structure-first-chunking.md +0 -0
  123. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  124. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  125. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  126. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  127. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  128. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  129. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  130. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  131. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  132. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  133. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  134. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  135. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  136. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  137. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  138. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  139. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  140. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  141. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  142. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  143. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  144. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  145. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  146. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  147. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  148. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  149. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  150. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
  151. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  152. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  153. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  154. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  155. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
  156. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
  157. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
  158. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0094-workspace-document-scope.md +0 -0
  159. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0095-span-page-provenance.md +0 -0
  160. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  161. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  162. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  163. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  164. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
  165. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  166. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  167. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  168. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  169. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  170. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  171. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
  172. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  173. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  174. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  175. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  176. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  177. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  178. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  179. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  180. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  181. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  182. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  183. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  184. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  185. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  186. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  187. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  188. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  189. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  190. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  191. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
  192. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  193. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  194. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  195. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  196. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  197. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  198. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  199. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  200. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  201. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  202. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  203. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
  204. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/adr/0140-one-model-family-on-metal.md +0 -0
  205. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/api/harness.md +0 -0
  206. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  207. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/architecture.md +0 -0
  208. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/README.md +0 -0
  209. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
  210. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  211. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  212. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  213. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  214. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  215. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  216. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  217. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  218. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  219. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  220. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  221. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  222. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  223. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  224. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  225. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  226. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  227. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  228. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  229. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  230. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  231. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  232. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  233. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  234. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  235. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  236. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  237. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  238. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  239. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  240. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  241. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  242. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  243. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  244. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  245. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  246. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  247. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  248. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  249. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  250. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  251. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  252. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  253. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  254. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  255. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  256. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  257. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  258. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  259. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  260. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  261. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  262. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  263. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  264. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  265. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  266. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  267. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  268. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  269. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  270. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/misc/.gitkeep +0 -0
  271. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  272. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/async-migration.md +0 -0
  273. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/demo_plan.md +0 -0
  274. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  275. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  276. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  277. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  278. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  279. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  280. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/concepts.md +0 -0
  281. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/configuration.md +0 -0
  282. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/contract_pipeline_explainer.md +0 -0
  283. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/corpus_ingest_recipe.md +0 -0
  284. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/README.md +0 -0
  285. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  286. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  287. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/entity-resolution.md +0 -0
  288. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  289. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
  290. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/classifier_model_ab.md +0 -0
  291. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/compliance_demo.md +0 -0
  292. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/compliance_gate_cc7.md +0 -0
  293. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/compliance_rung2_cc7.md +0 -0
  294. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  295. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/dg_model_ab.md +0 -0
  296. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/function_gate_recall.md +0 -0
  297. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  298. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
  299. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/ocr_benchmark.md +0 -0
  300. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/prod1_readiness.md +0 -0
  301. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/prod2_readiness.md +0 -0
  302. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/query_side_model_ab.md +0 -0
  303. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  304. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/silver_provider_routing.md +0 -0
  305. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  306. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/evals.md +0 -0
  307. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/harness.md +0 -0
  308. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/installation.md +0 -0
  309. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/playbook.md +0 -0
  310. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/capability_profiles.md +0 -0
  311. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/contracts_product_roadmap.md +0 -0
  312. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/engine-api-migration-handoff.md +0 -0
  313. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/engine_async_api.md +0 -0
  314. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/new-domain-build-sequence.md +0 -0
  315. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/product/seam-adaptation-guide.md +0 -0
  316. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  317. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  318. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/proposals/new-domain-developer-journey.md +0 -0
  319. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/proposals/ontology-induction.md +0 -0
  320. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/quickstart.md +0 -0
  321. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/reference-pack.md +0 -0
  322. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/releasing.md +0 -0
  323. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/engine-platform/SPEC.md +0 -0
  324. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/engine-platform/TASKS.md +0 -0
  325. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/engine-prep/plan.md +0 -0
  326. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/evals/plan.md +0 -0
  327. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  328. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  329. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/plan.md +0 -0
  330. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  331. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/langgraph-ingestion/plan.md +0 -0
  332. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
  333. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
  334. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
  335. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
  336. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
  337. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
  338. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  339. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  340. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  341. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  342. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  343. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  344. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
  345. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  346. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/templates/product-starter/CLAUDE.md.template +0 -0
  347. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/templates/product-starter/README.md +0 -0
  348. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/templates/product-starter/dependabot.yml +0 -0
  349. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/templates/product-starter/playbook.md.template +0 -0
  350. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  351. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  352. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  353. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  354. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  355. {rag_wright-0.16.1 → rag_wright-0.17.1}/docs/workspaces.md +0 -0
  356. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/__init__.py +0 -0
  357. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/acord.py +0 -0
  358. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/acord_retrieval.py +0 -0
  359. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/boundary_residue_gold.py +0 -0
  360. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/build_golden.py +0 -0
  361. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  362. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  363. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  364. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  365. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/condensed_pipeline.py +0 -0
  366. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/contract_parity_live.py +0 -0
  367. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/contractnli_judge.py +0 -0
  368. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/cuad_highlight.py +0 -0
  369. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/embedded_eval.py +0 -0
  370. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/full_pipeline_rerank.py +0 -0
  371. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/function_ceiling.py +0 -0
  372. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/function_property_rerank.py +0 -0
  373. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/function_rerank.py +0 -0
  374. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/gate1_chunker_ab.py +0 -0
  375. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/gate2_hybrid_rerank.py +0 -0
  376. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/golden/relational/set.json +0 -0
  377. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/golden.py +0 -0
  378. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/ground_discriminator_rerank.py +0 -0
  379. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/harness.py +0 -0
  380. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/ingestion_live_smoke.py +0 -0
  381. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/kg_primary.py +0 -0
  382. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/kg_property_rerank.py +0 -0
  383. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/listwise_rerank.py +0 -0
  384. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/multihop.py +0 -0
  385. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/nl_to_type.py +0 -0
  386. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/relational_eval.py +0 -0
  387. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/residual_decision_gold.py +0 -0
  388. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/segmenter_eval.py +0 -0
  389. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/semantic_judge_gold.py +0 -0
  390. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/test_acord.py +0 -0
  391. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/test_acord_retrieval.py +0 -0
  392. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/test_harness.py +0 -0
  393. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/test_multihop_set.py +0 -0
  394. {rag_wright-0.16.1 → rag_wright-0.17.1}/eval/unit_grouper_eval.py +0 -0
  395. {rag_wright-0.16.1 → rag_wright-0.17.1}/examples/model_server.py +0 -0
  396. {rag_wright-0.16.1 → rag_wright-0.17.1}/examples/quickstart.py +0 -0
  397. {rag_wright-0.16.1 → rag_wright-0.17.1}/plan.md +0 -0
  398. {rag_wright-0.16.1 → rag_wright-0.17.1}/release-please-config.json +0 -0
  399. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ab_model_overlap.py +0 -0
  400. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acord_unify.py +0 -0
  401. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_acord.py +0 -0
  402. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_cuad.py +0 -0
  403. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_ecfr.py +0 -0
  404. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_edgar.py +0 -0
  405. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_ftc_255.py +0 -0
  406. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/acquire_prod1_corpus.py +0 -0
  407. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/audit_reclass_flips.py +0 -0
  408. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/author_leg_a_silver_key.py +0 -0
  409. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/backfill_affiliations.py +0 -0
  410. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/backfill_clause_span_id.py +0 -0
  411. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/backfill_edge_source_doc_id.py +0 -0
  412. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/backup_kg_to_gcs.sh +0 -0
  413. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/bootstrap_template_capture.py +0 -0
  414. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/bootstrap_typed_edges.py +0 -0
  415. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/build_api_docs.py +0 -0
  416. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/build_api_docs.sh +0 -0
  417. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/build_cuad_clause_cache.py +0 -0
  418. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/build_function_routing_map.py +0 -0
  419. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/build_harness_doc.py +0 -0
  420. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_assemble_v2.py +0 -0
  421. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_assemble_v3.py +0 -0
  422. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_generate_hard_negatives.py +0 -0
  423. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_generate_hard_positives.py +0 -0
  424. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_generate_training.py +0 -0
  425. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_hybrid.py +0 -0
  426. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_hybrid2.py +0 -0
  427. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_jev_actor.py +0 -0
  428. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_jev_claimtypes.py +0 -0
  429. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_jev_operative.py +0 -0
  430. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_label_spans.py +0 -0
  431. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_laya_prep.py +0 -0
  432. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_laya_train.py +0 -0
  433. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_prep_operative.py +0 -0
  434. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric.py +0 -0
  435. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric2.py +0 -0
  436. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/cic1_train_operative.py +0 -0
  437. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/compare_extraction_models.py +0 -0
  438. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/compliance_actor_gate_smoke.py +0 -0
  439. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/compliance_engine_smoke.py +0 -0
  440. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/compliance_policy_demo.py +0 -0
  441. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/curate_taxonomy_gaps.py +0 -0
  442. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/dg_model_ab.py +0 -0
  443. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
  444. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
  445. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_leg_pool.py +0 -0
  446. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_legs.py +0 -0
  447. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_pool.py +0 -0
  448. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_relstructure.py +0 -0
  449. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/diagnose_acord_retrieval.py +0 -0
  450. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/eval_all.py +0 -0
  451. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/eval_ce.py +0 -0
  452. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/eval_listwise_b.py +0 -0
  453. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/export_ce_dataset.py +0 -0
  454. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/extract_features.py +0 -0
  455. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/listwise_variants.py +0 -0
  456. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/relational_features.py +0 -0
  457. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/train_ce.py +0 -0
  458. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/distill/train_modal.py +0 -0
  459. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/enrich_edgar_candidates.py +0 -0
  460. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/eval_chunking_ab.py +0 -0
  461. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  462. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/eval_compliance_gold.py +0 -0
  463. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/extract_arcadedb_docs.py +0 -0
  464. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/fetch_reference_models.py +0 -0
  465. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/generate_contract_python.py +0 -0
  466. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/git_post_commit_graphify.sh +0 -0
  467. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/granite_chunker_assess.py +0 -0
  468. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/graph_status.sh +0 -0
  469. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_acord.py +0 -0
  470. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_compliance_async_prod2.py +0 -0
  471. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_compliance_document_prod2.py +0 -0
  472. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_compliance_prod2.py +0 -0
  473. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_cuad.py +0 -0
  474. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_cuad_full.py +0 -0
  475. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_ftc_compliance.py +0 -0
  476. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_prod1.py +0 -0
  477. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_prod1_async.py +0 -0
  478. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ingest_smoke.py +0 -0
  479. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/install_git_hooks.sh +0 -0
  480. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/label_new_functions.py +0 -0
  481. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/legb_function_gate_recall.py +0 -0
  482. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/make_compliance_fixtures.py +0 -0
  483. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/make_compliance_gold.py +0 -0
  484. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/mcp_compliance_agent_demo.py +0 -0
  485. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  486. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
  487. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/measure_generation_robustness.py +0 -0
  488. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/measure_harness_genericity.py +0 -0
  489. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/measure_silver.py +0 -0
  490. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/merge_docs_into_framework.py +0 -0
  491. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  492. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
  493. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  494. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/migrate_span_fields.py +0 -0
  495. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/mine_scarce_functions.py +0 -0
  496. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_arcadedb.py +0 -0
  497. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_backfill.py +0 -0
  498. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_exception_linking.py +0 -0
  499. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm.py +0 -0
  500. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  501. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_granite_server.py +0 -0
  502. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_granite_throughput.py +0 -0
  503. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_granite_vllm_server.py +0 -0
  504. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_query_app.py +0 -0
  505. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_bench.py +0 -0
  506. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  507. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_qwen3_vllm_server.py +0 -0
  508. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/modal_stack_a100.py +0 -0
  509. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ocr_benchmark.py +0 -0
  510. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ocr_preprocess.py +0 -0
  511. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/ontology_dimension_check.py +0 -0
  512. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/phase_a_leg_validate.py +0 -0
  513. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/populate_clause_kg.py +0 -0
  514. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/populate_entity_graph.py +0 -0
  515. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/populate_entity_graph_extracted.py +0 -0
  516. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/populate_property_store.py +0 -0
  517. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/prep_relational_verification.py +0 -0
  518. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/publish_manifests.py +0 -0
  519. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/reclassify_kg.py +0 -0
  520. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/refresh_framework_graph.sh +0 -0
  521. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/revert_reclass_flips.py +0 -0
  522. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/run_acord_retrieval.py +0 -0
  523. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/run_clause_exception_linking.py +0 -0
  524. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/semantic_judge_live_validate.py +0 -0
  525. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/semantic_judge_probe.py +0 -0
  526. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/snapshot_leg_a_eval.py +0 -0
  527. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/stack_correctness_validate.py +0 -0
  528. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/table_retrieval_smoke.py +0 -0
  529. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/train_function_classifier.py +0 -0
  530. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/train_legalbert_function.py +0 -0
  531. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/train_legalbert_modal.py +0 -0
  532. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/typed_rerank_validate.py +0 -0
  533. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/verify_wheel_install.sh +0 -0
  534. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/vllm_extraction_ab.py +0 -0
  535. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/vllm_kg_query_validate.py +0 -0
  536. {rag_wright-0.16.1 → rag_wright-0.17.1}/scripts/vllm_raw_diagnostic.py +0 -0
  537. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  538. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
  539. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
  540. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
  541. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
  542. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
  543. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
  544. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  545. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  546. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  547. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  548. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  549. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  550. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  551. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
  552. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
  553. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/__init__.py +0 -0
  554. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/__init__.py +0 -0
  555. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/agents.py +0 -0
  556. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/answers.py +0 -0
  557. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/config.py +0 -0
  558. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/discover.py +0 -0
  559. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/documents.py +0 -0
  560. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/ids.py +0 -0
  561. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/invoke.py +0 -0
  562. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/mcp.py +0 -0
  563. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/tracing.py +0 -0
  564. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/usage.py +0 -0
  565. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/api/workspace.py +0 -0
  566. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/__init__.py +0 -0
  567. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
  568. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/ard.py +0 -0
  569. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
  570. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
  571. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
  572. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_parse.py +0 -0
  573. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_scope.py +0 -0
  574. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding.py +0 -0
  575. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  576. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  577. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/fusion.py +0 -0
  578. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_query.py +0 -0
  579. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
  580. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  581. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/invoke.py +0 -0
  582. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
  583. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/manifests.py +0 -0
  584. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/parse_audit.py +0 -0
  585. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/parsing.py +0 -0
  586. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/registry.py +0 -0
  587. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  588. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/reranking.py +0 -0
  589. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  590. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  591. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
  592. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  593. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  594. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_search.py +0 -0
  595. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  596. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  597. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/__init__.py +0 -0
  598. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/chunk.py +0 -0
  599. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/evals.py +0 -0
  600. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/extraction.py +0 -0
  601. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/graph.py +0 -0
  602. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/identifiers.py +0 -0
  603. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/ingestion.py +0 -0
  604. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/provenance.py +0 -0
  605. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/contracts/span.py +0 -0
  606. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/corpus/__init__.py +0 -0
  607. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/corpus/canonicalize.py +0 -0
  608. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/corpus/document_parser.py +0 -0
  609. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/corpus/embedded.py +0 -0
  610. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/corpus/http.py +0 -0
  611. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/evals/__init__.py +0 -0
  612. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/evals/gold.py +0 -0
  613. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/evals/langfuse_backend.py +0 -0
  614. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/evals/runner.py +0 -0
  615. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/evals/scorers.py +0 -0
  616. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/__init__.py +0 -0
  617. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/accounting.py +0 -0
  618. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/agent.py +0 -0
  619. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/batch.py +0 -0
  620. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/clarify.py +0 -0
  621. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/confirm.py +0 -0
  622. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/decisions.py +0 -0
  623. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/definition.py +0 -0
  624. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/dispatch.py +0 -0
  625. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/errors.py +0 -0
  626. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/events.py +0 -0
  627. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/filesystem.py +0 -0
  628. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/grading.py +0 -0
  629. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/interpreter.py +0 -0
  630. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/memory.py +0 -0
  631. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/models.py +0 -0
  632. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/rules.py +0 -0
  633. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/runs.py +0 -0
  634. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/scope.py +0 -0
  635. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/seen.py +0 -0
  636. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/skills.py +0 -0
  637. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/thinking.py +0 -0
  638. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/tiers.py +0 -0
  639. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/tracing.py +0 -0
  640. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/withhold.py +0 -0
  641. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/harness/workers.py +0 -0
  642. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/__init__.py +0 -0
  643. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/evaluate.py +0 -0
  644. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/group.py +0 -0
  645. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/segment.py +0 -0
  646. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ingestion/tables.py +0 -0
  647. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/__init__.py +0 -0
  648. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/model_servers.py +0 -0
  649. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/profiles.py +0 -0
  650. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/seam.py +0 -0
  651. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/tag_structured.py +0 -0
  652. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/tracing.py +0 -0
  653. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/usage.py +0 -0
  654. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/models/weights.py +0 -0
  655. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ontology/__init__.py +0 -0
  656. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ontology/pack_schema.py +0 -0
  657. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/ontology/registry.py +0 -0
  658. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/__init__.py +0 -0
  659. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
  660. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  661. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  662. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  663. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  664. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  665. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  666. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
  667. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  668. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  669. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  670. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  671. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  672. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  673. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/pack.py +0 -0
  674. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  675. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  676. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  677. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  678. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  679. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  680. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  681. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  682. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  683. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  684. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  685. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  686. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  687. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  688. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  689. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
  690. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  691. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  692. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  693. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  694. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  695. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  696. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  697. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  698. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  699. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  700. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  701. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  702. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  703. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  704. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  705. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  706. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  707. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  708. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  709. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  710. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  711. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  712. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  713. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  714. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  715. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  716. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  717. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  718. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  719. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  720. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  721. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/options.py +0 -0
  722. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/pack.py +0 -0
  723. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  724. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  725. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  726. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  727. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  728. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  729. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  730. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  731. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  732. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  733. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  734. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  735. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  736. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  737. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  738. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  739. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  740. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  741. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  742. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  743. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  744. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  745. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  746. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  747. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  748. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  749. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  750. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  751. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  752. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  753. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  754. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  755. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  756. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  757. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  758. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  759. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  760. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  761. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  762. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  763. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  764. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  765. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  766. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  767. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  768. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  769. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  770. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  771. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/packs/reference_seam.py +0 -0
  772. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/py.typed +0 -0
  773. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/__init__.py +0 -0
  774. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
  775. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/generation/__init__.py +0 -0
  776. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  777. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
  778. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/agent.py +0 -0
  779. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  780. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  781. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  782. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/spans/__init__.py +0 -0
  783. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/spans/page_map.py +0 -0
  784. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/store/__init__.py +0 -0
  785. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/store/chunk_text.py +0 -0
  786. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/subgraphs/__init__.py +0 -0
  787. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  788. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/subgraphs/observability.py +0 -0
  789. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
  790. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  791. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/util/__init__.py +0 -0
  792. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/util/concurrent.py +0 -0
  793. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/util/devices.py +0 -0
  794. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/util/pdfium.py +0 -0
  795. {rag_wright-0.16.1 → rag_wright-0.17.1}/src/rag_wright/util/spacy_model.py +0 -0
  796. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/__init__.py +0 -0
  797. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/__init__.py +0 -0
  798. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_agent_chat_model.py +0 -0
  799. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_agent_chat_model_live.py +0 -0
  800. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_answers_exports.py +0 -0
  801. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_api_embedder_ps39.py +0 -0
  802. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_bytes_ingest.py +0 -0
  803. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_capability_reexports.py +0 -0
  804. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_decision_swap_doc_example.py +0 -0
  805. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_discover.py +0 -0
  806. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_documents.py +0 -0
  807. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_drop_workspace.py +0 -0
  808. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_drop_workspace_live.py +0 -0
  809. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_e2e.py +0 -0
  810. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_invoke.py +0 -0
  811. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_mcp.py +0 -0
  812. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_metering_tracing_exports.py +0 -0
  813. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_migrate_span_fields.py +0 -0
  814. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_model_role_export.py +0 -0
  815. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_open_workspace_reconfig.py +0 -0
  816. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_options.py +0 -0
  817. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_pack_sdk.py +0 -0
  818. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_pack_store.py +0 -0
  819. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_pdf_page_count.py +0 -0
  820. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_public_gaps_ps38.py +0 -0
  821. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_tracing_helpers_ps32.py +0 -0
  822. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_usage.py +0 -0
  823. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_workspace.py +0 -0
  824. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/api/test_workspace_models.py +0 -0
  825. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
  826. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_api_docs_current.py +0 -0
  827. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_doc_references.py +0 -0
  828. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  829. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_import_contracts.py +0 -0
  830. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_lock_version.py +0 -0
  831. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
  832. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_pdfium_door.py +0 -0
  833. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/arch/test_shipped_skills.py +0 -0
  834. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/async_helpers.py +0 -0
  835. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/__init__.py +0 -0
  836. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  837. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator.py +0 -0
  838. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator_async.py +0 -0
  839. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_assertion_extraction.py +0 -0
  840. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_authoring_contract.py +0 -0
  841. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_chunk_read.py +0 -0
  842. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_chunk_write.py +0 -0
  843. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  844. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_claim_extraction.py +0 -0
  845. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
  846. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_compliance_judgment.py +0 -0
  847. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_compliance_store.py +0 -0
  848. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
  849. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store.py +0 -0
  850. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  851. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  852. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_dg_adapter.py +0 -0
  853. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_dg_async.py +0 -0
  854. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_dg_extraction.py +0 -0
  855. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_dg_model_seam.py +0 -0
  856. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_dg_private.py +0 -0
  857. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_disambiguation.py +0 -0
  858. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_document_scope.py +0 -0
  859. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_embedding.py +0 -0
  860. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_embedding_profiles.py +0 -0
  861. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_entity_resolution.py +0 -0
  862. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  863. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_fusion.py +0 -0
  864. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_graph_extraction.py +0 -0
  865. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_graph_query.py +0 -0
  866. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_graph_storage.py +0 -0
  867. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_highlight_serve.py +0 -0
  868. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_hybrid_search.py +0 -0
  869. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_jev_decision.py +0 -0
  870. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_manifest_validation.py +0 -0
  871. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_manifests.py +0 -0
  872. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_parse_audit.py +0 -0
  873. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_parsing.py +0 -0
  874. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_parties_extraction.py +0 -0
  875. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  876. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_query_function_classifier.py +0 -0
  877. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_query_understanding.py +0 -0
  878. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_registry.py +0 -0
  879. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_remote_encoders.py +0 -0
  880. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_repair_partition.py +0 -0
  881. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_requirement_extraction.py +0 -0
  882. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_reranking.py +0 -0
  883. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_retrieval_core.py +0 -0
  884. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking.py +0 -0
  885. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  886. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_rlm_method.py +0 -0
  887. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
  888. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_runtime_registry.py +0 -0
  889. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_scan_quality.py +0 -0
  890. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  891. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_span_search.py +0 -0
  892. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  893. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
  894. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  895. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_tiered_ocr.py +0 -0
  896. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/capabilities/test_vlm_ocr.py +0 -0
  897. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/compliance_fakes.py +0 -0
  898. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/conftest.py +0 -0
  899. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/__init__.py +0 -0
  900. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  901. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_chunk_record.py +0 -0
  902. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_compliance.py +0 -0
  903. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  904. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_extraction.py +0 -0
  905. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_function.py +0 -0
  906. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_function_routing.py +0 -0
  907. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_identifiers.py +0 -0
  908. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_ingestion_hooks.py +0 -0
  909. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_jurisdiction.py +0 -0
  910. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_ontology.py +0 -0
  911. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_property.py +0 -0
  912. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_provenance.py +0 -0
  913. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/contracts/test_value_match.py +0 -0
  914. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/__init__.py +0 -0
  915. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/_ooxml_fixtures.py +0 -0
  916. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_canonicalize.py +0 -0
  917. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_cuad.py +0 -0
  918. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_cuad_ingestion.py +0 -0
  919. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_document_parser.py +0 -0
  920. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_edgar.py +0 -0
  921. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_embedded.py +0 -0
  922. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_gcs_ingestion.py +0 -0
  923. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_http.py +0 -0
  924. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_parse_wire2.py +0 -0
  925. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/corpus/test_selection.py +0 -0
  926. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/eval/test_contractnli_judge.py +0 -0
  927. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  928. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/eval/test_kg_property_rerank.py +0 -0
  929. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
  930. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/eval/test_relational_eval.py +0 -0
  931. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/__init__.py +0 -0
  932. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_gold_contracts.py +0 -0
  933. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_gold_import.py +0 -0
  934. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_langfuse_backend.py +0 -0
  935. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_runner.py +0 -0
  936. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_scorer_parity.py +0 -0
  937. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_scorers_a.py +0 -0
  938. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_scorers_b.py +0 -0
  939. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_scorers_c.py +0 -0
  940. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/evals/test_scorers_d.py +0 -0
  941. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
  942. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
  943. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
  944. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
  945. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
  946. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  947. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  948. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  949. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/README.md +0 -0
  950. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  951. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
  952. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/foundation/__init__.py +0 -0
  953. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  954. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/foundation/test_model_seam_structured.py +0 -0
  955. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/__init__.py +0 -0
  956. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_greenfield_conformance.py +0 -0
  957. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_accounting.py +0 -0
  958. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_engine_wiring.py +0 -0
  959. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_genericity.py +0 -0
  960. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_live.py +0 -0
  961. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_recorder.py +0 -0
  962. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/harness/test_harness_thinking.py +0 -0
  963. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/__init__.py +0 -0
  964. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_aevaluate.py +0 -0
  965. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  966. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  967. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_document_metadata.py +0 -0
  968. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_evaluate.py +0 -0
  969. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_evaluate_labels.py +0 -0
  970. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_graph_live.py +0 -0
  971. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_layout_segmenter.py +0 -0
  972. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_sheet_continuations.py +0 -0
  973. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
  974. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_table_rows.py +0 -0
  975. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_tuning.py +0 -0
  976. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_unit_grouper.py +0 -0
  977. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ingestion/test_unit_representative.py +0 -0
  978. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/journey/incidents_domain.py +0 -0
  979. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/journey/incidents_pack.ttl +0 -0
  980. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/journey/test_incidents_journey.py +0 -0
  981. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/journey/test_pack_schema.py +0 -0
  982. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/__init__.py +0 -0
  983. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/test_compliance_server.py +0 -0
  984. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
  985. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  986. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/test_relational_qa_server.py +0 -0
  987. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  988. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/__init__.py +0 -0
  989. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_async_infra.py +0 -0
  990. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_classifier_heads_load_clean.py +0 -0
  991. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_model_servers.py +0 -0
  992. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_models_dir.py +0 -0
  993. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_no_gemma_default.py +0 -0
  994. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_profile_routing.py +0 -0
  995. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_profile_seam.py +0 -0
  996. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_seam_async.py +0 -0
  997. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_seam_deadline_and_cap.py +0 -0
  998. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_seam_event_loops.py +0 -0
  999. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_seam_retry.py +0 -0
  1000. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_seam_stream.py +0 -0
  1001. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_serving_seam.py +0 -0
  1002. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_serving_wiring.py +0 -0
  1003. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_tag_structured.py +0 -0
  1004. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_tag_structured_async.py +0 -0
  1005. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_tracing.py +0 -0
  1006. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/models/test_usage.py +0 -0
  1007. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/__init__.py +0 -0
  1008. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_clause_template.py +0 -0
  1009. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  1010. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_derivation.py +0 -0
  1011. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_entity_taxonomy.py +0 -0
  1012. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  1013. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  1014. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  1015. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  1016. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/reference/test_compliance_reference.py +0 -0
  1017. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/reference/test_contract_seam.py +0 -0
  1018. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
  1019. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
  1020. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/scripts/test_fetch_reference_models.py +0 -0
  1021. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/scripts/test_generation_robustness_errors.py +0 -0
  1022. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/skills/__init__.py +0 -0
  1023. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/skills/test_creating_evals_skill_example.py +0 -0
  1024. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/skills/test_ingestion_skill_example.py +0 -0
  1025. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_boundary.py +0 -0
  1026. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_classifier_property_extractor.py +0 -0
  1027. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  1028. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier.py +0 -0
  1029. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
  1030. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor.py +0 -0
  1031. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  1032. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_dim_classifier.py +0 -0
  1033. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_dim_fleet_live.py +0 -0
  1034. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_function_classifier.py +0 -0
  1035. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_hybrid_classifier.py +0 -0
  1036. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
  1037. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_legalbert_classifier.py +0 -0
  1038. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_model_capabilities.py +0 -0
  1039. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_new_function_labels.py +0 -0
  1040. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_page_map.py +0 -0
  1041. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_property_extractor.py +0 -0
  1042. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_property_grounding.py +0 -0
  1043. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_reclassify.py +0 -0
  1044. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_residual_decision.py +0 -0
  1045. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_scarce_function_labels.py +0 -0
  1046. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_segment.py +0 -0
  1047. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_segmentation_vocab.py +0 -0
  1048. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_semantic_judge.py +0 -0
  1049. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
  1050. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_setfit_probabilities.py +0 -0
  1051. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_span_offsets.py +0 -0
  1052. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_stage_labels_0005.py +0 -0
  1053. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_symbolic_validation.py +0 -0
  1054. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/spans/test_tag_clause_extractor.py +0 -0
  1055. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/__init__.py +0 -0
  1056. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_affiliation_backfill.py +0 -0
  1057. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
  1058. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_contract.py +0 -0
  1059. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_property.py +0 -0
  1060. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1061. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_arcadedb_span.py +0 -0
  1062. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_chunk_text.py +0 -0
  1063. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_concurrent_writes.py +0 -0
  1064. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_contract_kg_store_live.py +0 -0
  1065. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_document_metadata_live.py +0 -0
  1066. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_document_scope.py +0 -0
  1067. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_engine_domain_neutral.py +0 -0
  1068. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_entities_by_name.py +0 -0
  1069. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_contains.py +0 -0
  1070. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_edges.py +0 -0
  1071. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_identifiers.py +0 -0
  1072. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_mutations.py +0 -0
  1073. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_range.py +0 -0
  1074. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_read.py +0 -0
  1075. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_kg_write.py +0 -0
  1076. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_neutral_schema.py +0 -0
  1077. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_pack_schema_properties.py +0 -0
  1078. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_pooled_client.py +0 -0
  1079. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_store_create_flag.py +0 -0
  1080. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/store/test_write_graph_idempotent.py +0 -0
  1081. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/__init__.py +0 -0
  1082. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_async_ingestion.py +0 -0
  1083. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1084. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_clause_results.py +0 -0
  1085. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_check.py +0 -0
  1086. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1087. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  1088. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1089. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1090. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_contract_write_retry.py +0 -0
  1091. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_graph_extraction.py +0 -0
  1092. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1093. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1094. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1095. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_observability.py +0 -0
  1096. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1097. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1098. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_relational_qa.py +0 -0
  1099. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1100. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_scaffold.py +0 -0
  1101. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1102. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1103. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1104. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/test_backfill_clause_span_id.py +0 -0
  1105. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/test_dg_model_ab.py +0 -0
  1106. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/test_populate_clause_kg.py +0 -0
  1107. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/test_populate_entity_graph.py +0 -0
  1108. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/util/__init__.py +0 -0
  1109. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/util/test_concurrent.py +0 -0
  1110. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/util/test_devices.py +0 -0
  1111. {rag_wright-0.16.1 → rag_wright-0.17.1}/tests/util/test_spacy_model.py +0 -0
@@ -22,7 +22,7 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
22
22
  |---|---|---|---|
23
23
  | parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown, images and scans; embedded files) | engine | docling, content-hash cached; images and scanned pages are OCR'd, and only degraded pages escalate to the vision model (the `VISION_OCR` role) | (none) |
24
24
  | chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
25
- | segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
25
+ | segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` (to adjust the default rather than replace it, wrap `pack_sdk.segment_layout`) |
26
26
  | tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
27
27
  | index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
28
28
  | group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
@@ -181,6 +181,9 @@ category.
181
181
  `evaluate_ingestion(..., table_labels=[{"pattern": <regex on the header row>, "label": "record"|"block"}])`
182
182
  (first match wins): a block table split per row, or a wide record table not split, is a failure, and tables no
183
183
  pattern matched are listed in `unlabelled_tables`.
184
+ - **Every row of a record table should reach a unit.** After an ingest, `DocumentReport.unreached_table_rows` lists
185
+ each record table whose rows did not all reach a unit with their `TableRow` (with the `[ingest] warning:` line);
186
+ an empty list on your samples is the check. Rows listed there produced no record.
184
187
  - **How an embedded file finds its row.** An identifier is a token of 4+ characters containing a digit that appears
185
188
  on at most `IdentifierRule.max_rows` table rows and in at most `max_files` embedded files (defaults 3 and 3; set
186
189
  them with `IngestionTuning(identifier=IdentifierRule(...))`). A file whose identifiers match no row, or too many,
@@ -196,7 +199,11 @@ category.
196
199
  - **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
197
200
  whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
198
201
  `document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
199
- mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key.
202
+ mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
203
+ emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
204
+ (PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
205
+ off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
206
+ provenance).
200
207
  - **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
201
208
  saver; the engine ships none) and a `run_id` naming the run:
202
209
  `await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
@@ -205,8 +212,9 @@ category.
205
212
  sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
206
213
  LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
207
214
  - **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
208
- key but is not fully idempotent for edges (engine gap G8): when a source is re-run, remove its previous records
209
- first (`kg_delete` on the provenance your records carry, such as a per-source property) and write again.
215
+ key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
216
+ source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
217
+ provenance your records carry, such as a per-source property) and write again.
210
218
 
211
219
  ## 6. Verify (definition of done)
212
220
 
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.17.1"
3
+ }
@@ -4,6 +4,26 @@ All notable changes to RAG_Wright are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
5
5
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.17.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.17.0...0.17.1) (2026-11-07)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **PS-63:** the default record writer keeps one edge per type and endpoints (G8) ([e77ca91](https://github.com/fzaidi-dai/RAG_Wright/commit/e77ca9151e8cd5a425237f30ada721349eac7bb0))
13
+
14
+ ## [0.17.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.1...0.17.0) (2026-11-05)
15
+
16
+
17
+ ### Features
18
+
19
+ * **PS-61:** the default segmenter is on pack_sdk, so a pack can wrap it ([bbb179d](https://github.com/fzaidi-dai/RAG_Wright/commit/bbb179d64e5fc905ada2ddc57367cdd2cc2ca5b6))
20
+ * **PS-62:** a record table's rows that reach no unit are reported, never silent ([632fefb](https://github.com/fzaidi-dai/RAG_Wright/commit/632fefb390e11014a0dcb4cdd16956697a92ea58))
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * **PS-60:** a table over the chunk cap keeps every row's span and TableRow ([acd9ce5](https://github.com/fzaidi-dai/RAG_Wright/commit/acd9ce5917de1daac6ac47ea0a09ca975fcdf556))
26
+
7
27
  ## [0.16.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.0...0.16.1) (2026-11-01)
8
28
 
9
29
 
@@ -55,7 +55,17 @@ The failure mode to avoid, which has happened before: a command fails with "modu
55
55
 
56
56
  ## Start of every session
57
57
 
58
- > **CURRENT STATE (2026-10-29): `rag-wright` 0.16.0 is RELEASED** (PR #19; TexWright's requests: PS-54 a `Contains`
58
+ > **CURRENT STATE (2026-11-07): PS-63 done, unreleased** (TexWright's G8 request: the default record writer keeps one
59
+ > edge per type and endpoints, `kg_write(..., ensure_edges=True)`, ADR-0142). Next: PS-48, EV-7, PS-30, PS-33. Before it,
60
+ > **`rag-wright` 0.17.0 is RELEASED** (PR #21; TexWright's request: PS-60 a table over
61
+ > the chunk cap is split between lines with its header repeated, so every row keeps its span and `TableRow` (ADR-0141);
62
+ > PS-61 the default segmenter `segment_layout` is on `pack_sdk`; PS-62 a record table's rows that reach no unit are
63
+ > reported, `DocumentReport.unreached_table_rows`). Next: PS-48, EV-7, PS-30, PS-33. Before it,
64
+ > **`rag-wright` 0.16.1 is RELEASED** (PR #20; RuleWright's two requests and a finding
65
+ > from them: PS-57 a retried contracts-pack write no longer loses a document's clauses, the ArcadeDB conflict budget is
66
+ > configurable (default 20 attempts / 2 s cap) and a racing UPSERT's duplicate key is retried; PS-58 a `RecordWriter`
67
+ > returns the count that landed; PS-59 the store's client keeps keep-alive connections, one session per thread). Next:
68
+ > PS-48, EV-7, PS-30, PS-33. Before it, **`rag-wright` 0.16.0 is RELEASED** (PR #19; TexWright's requests: PS-54 a `Contains`
59
69
  > substring `where` value, PS-55 only the BGE models on Metal under one process lock (ADR-0140); PS-56 the BGE reranker
60
70
  > scores again on transformers 5). Before it, **`rag-wright` 0.15.0 is RELEASED** (PR #18; PS-51 the frontend skill draws the shell and
61
71
  > ships its scaffold, RuleWright's request; PS-52 one workspace embedder under concurrent first use and PS-53 KG calls refuse
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.16.1
3
+ Version: 0.17.1
4
4
  Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
5
5
  Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
6
6
  Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
@@ -0,0 +1,38 @@
1
+ # ADR-0141: The cap's hard split cuts between lines and repeats a table's header
2
+
3
+ **Status:** accepted · **Date:** 2026-11-05 · **Related:** PS-60, TexWright's request
4
+ `2026-11-05-export-the-default-segmenter-on-pack-sdk.md`, ADR-0069 (tables chunked in reading order), ADR-0124
5
+ (ING-2 the default segmenter, ING-7 `table_rows`), ADR-0136 (spreadsheet tables glued across blank rows)
6
+
7
+ ## Context
8
+
9
+ A chunk is a run of whole parsed items, and the token cap is enforced last: a section over the cap that the
10
+ discoverer cannot subdivide (a single table is one item) is hard-split. The split cut every `token_cap * 4`
11
+ characters, wherever that fell. In a table it fell mid-row, and three things followed. The table item was found
12
+ whole in no chunk, so `chunk_layouts` placed it nowhere, and the unplaced item also stopped every later item in the
13
+ document from getting its parsed layout. Each piece then fell back to the text layout: the first piece still
14
+ opened with the table's header, but a continuation piece began mid-row, read as one paragraph, and gave ONE span to
15
+ all its rows. With no row spans, no unit carried a `TableRow`, so a record extractor never saw those rows, and the
16
+ ingest reported success. TexWright lost 4 of 140 records this way; a 140-record, 76-column synthetic workbook lost
17
+ 205 of 280 rows.
18
+
19
+ ## Decision
20
+
21
+ - The hard split cuts at the last blank line in the second half of the window, else the last line break, else the
22
+ last space, and only a run with none of them at a fixed length. The whitespace character it cuts at is dropped.
23
+ Pieces stay strictly under the cap.
24
+ - A cut inside a pipe table repeats the table's header and separator rows at the top of the next piece, so every
25
+ piece is a well-formed table, each row is whole in one chunk, and the segmenter, the unit grouper's record-table
26
+ test and the row-to-span map work unchanged on every piece. A header half the cap or longer is not repeated.
27
+ - `chunk_layouts` skips an item that no remaining chunk holds whole, instead of blocking the items after it.
28
+ - A cached chunk manifest holding a piece exactly the cap long with table lines in it can only come from the old
29
+ cut; it is re-chunked once, with a log line. An old prose split keeps its cached chunks.
30
+
31
+ ## Consequences
32
+
33
+ - Live, the workbook above yields 280 of 280 row records (75 before), and every span is one row.
34
+ - A document with a section over the cap gets different chunk boundaries, so different `chunk_id`s and spans when
35
+ re-ingested; the `chunk_id` scheme is unchanged and documents under the cap are untouched. A repeated header
36
+ appears once per continuation chunk in the canonical document text.
37
+ - Whether a pack may build on the default segmenter (PS-61) and whether a record table's lost rows are reported
38
+ (PS-62) are separate tasks.
@@ -0,0 +1,32 @@
1
+ # ADR-0142: The default record writer keeps one edge per type and endpoints
2
+
3
+ **Status:** accepted · **Date:** 2026-11-07 · **Related:** PS-63, engine gap G8, TexWright's request
4
+ `2026-10-15-g8-duplicates-edges-within-one-ingest.md`, ADR-0124 (ING-4b `kg_ensure_edges`), issue 0029
5
+ (`outV()`/`inV()` endpoint filters)
6
+
7
+ ## Context
8
+
9
+ With no `writer=`, `build_ingestion` wrote records with `kg_write`: nodes upserted by key, edges created with a plain
10
+ `CREATE EDGE`. The engine's own guidance has an entity several units mention emitted by its key from each unit, so
11
+ each such unit also emitted the edge to it, and that edge landed once per unit, within one ingest and again on every
12
+ re-ingest. Node counts stayed right, so only a traversal showed it (TexWright: 3 children read back as 6). The
13
+ store's idempotent `kg_ensure_edges` runs a query and a write per edge outside any transaction, and scans the edge
14
+ type for each edge.
15
+
16
+ ## Decision
17
+
18
+ - `Store.kg_write` takes `ensure_edges` (default `False`). When true, an edge is identified by its type and its two
19
+ endpoints (direction counts): the batch keeps each edge's last props; each edge is an index-driven `UPDATE` of an
20
+ existing one, reached through `outE` from its indexed from node, then `CREATE EDGE ... IF NOT EXISTS`, all in the
21
+ write's one transaction under the same conflict retry. ArcadeDB 26.7 was probed live: `IF NOT EXISTS` holds within
22
+ one transaction, across transactions and across concurrent writers.
23
+ - The ingestion default writer passes `True`; `rag_wright.api.kg_write` exposes the flag for a domain's own writer.
24
+ - Without the flag `kg_write` is unchanged: a caller whose parallel edges each carry their own provenance (the
25
+ reference pack's clause-to-value assertions, RuleWright's writer) keeps them.
26
+
27
+ ## Consequences
28
+
29
+ - An edge several units emit, or a re-ingest writes again, lands once with the last unit's props; G8 is closed.
30
+ - A domain that means parallel edges of one type between the same two nodes, and uses the default writer, now gets
31
+ one; it passes a `writer=` that calls `kg_write` without the flag.
32
+ - A re-ingest still does not remove records a document no longer yields. `kg_ensure_edges` is unchanged.
@@ -196,4 +196,6 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
196
196
  0137 A generated answer states the evidence's support every time, and "none" is an abstention ·
197
197
  0138 PDF parses run one at a time, and the engine reaches pdfium through one locked door ·
198
198
  0139 The agent harness substrate is engine scope ·
199
- 0140 One model family on Metal, under one process lock
199
+ 0140 One model family on Metal, under one process lock ·
200
+ 0141 The cap's hard split cuts between lines and repeats a table's header ·
201
+ 0142 The default record writer keeps one edge per type and endpoints
@@ -216,9 +216,9 @@ A stage that raises routes to `dead_letter`, which ends the document with its `D
216
216
 
217
217
  The result of `IngestionPipeline.aingest`: one `DocumentReport` per document (embedded children included). `failed` counts the dead-lettered documents and `succeeded` the rest (properties).
218
218
 
219
- ### `DocumentReport(doc_id: 'str', parent_doc_id: 'Optional[str]' = None, chunks: 'int' = 0, spans: 'int' = 0, units: 'int' = 0, records: 'int' = 0, extraction_failures: 'list[dict]' = <factory>, span_failures: 'list[dict]' = <factory>, skipped_hidden_sheets: 'list[str]' = <factory>, embedded_skipped: 'list[str]' = <factory>, children: 'list[str]' = <factory>, links: 'dict[str, int]' = <factory>, unmapped_links: 'int' = 0, dead_letter: 'Optional[str]' = None) -> None`
219
+ ### `DocumentReport(doc_id: 'str', parent_doc_id: 'Optional[str]' = None, chunks: 'int' = 0, spans: 'int' = 0, units: 'int' = 0, records: 'int' = 0, extraction_failures: 'list[dict]' = <factory>, span_failures: 'list[dict]' = <factory>, skipped_hidden_sheets: 'list[str]' = <factory>, embedded_skipped: 'list[str]' = <factory>, children: 'list[str]' = <factory>, links: 'dict[str, int]' = <factory>, unmapped_links: 'int' = 0, unreached_table_rows: 'list[dict]' = <factory>, dead_letter: 'Optional[str]' = None) -> None`
220
220
 
221
- What ingesting one document did. Counts: `chunks`, `spans` (indexed), `units` (extracted), `records` (nodes written). `extraction_failures` (`{unit, anchor, reason}`) / `span_failures` (`{span_id, reason}`): the units / spans whose extraction or indexing failed; the rest of the document still lands. `skipped_hidden_sheets`: hidden spreadsheet sheets left out (`IngestSource.include_hidden_sheets=False`). `children`: the ids of embedded files and PDF attachments ingested as child documents (`parent_doc_id` is set on theirs); `embedded_skipped`: embedded files that could not be ingested. `links`: `AttachedTo` record links written, by confidence; `unmapped_links`: links whose record row could not be found. `dead_letter`: why the whole document failed (None when it landed).
221
+ What ingesting one document did. Counts: `chunks`, `spans` (indexed), `units` (extracted), `records` (nodes written). `extraction_failures` (`{unit, anchor, reason}`) / `span_failures` (`{span_id, reason}`): the units / spans whose extraction or indexing failed; the rest of the document still lands. `skipped_hidden_sheets`: hidden spreadsheet sheets left out (`IngestSource.include_hidden_sheets=False`). `children`: the ids of embedded files and PDF attachments ingested as child documents (`parent_doc_id` is set on theirs); `embedded_skipped`: embedded files that could not be ingested. `links`: `AttachedTo` record links written, by confidence; `unmapped_links`: links whose record row could not be found. `unreached_table_rows` (PS-62): one entry per record table -- a table at least one of whose rows reached a unit carrying its `TableRow` -- whose data rows did not ALL reach one, `{table_ref, sheet, reached, total, missing}` (`missing`: the 1-based data-row indices, at most the first 1,000); the document still lands, so read this, or the `[ingest] warning:` line, to know rows were lost. `dead_letter`: why the whole document failed (None when it landed).
222
222
 
223
223
  ### `IngestionEvaluation(documents: 'list[DocumentEvaluation]' = <factory>, failures: 'list[str]' = <factory>, unlabelled_tables: 'list[str]' = <factory>, labels: 'Optional[LabelEvaluation]' = None, warnings: 'list[str]' = <factory>) -> None`
224
224
 
@@ -430,9 +430,9 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
430
430
 
431
431
  Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence), a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`) or a `Contains` (a literal substring, case-insensitive unless `case_sensitive=True`; an empty field never matches: `{"composition": Contains("UHMWPE")}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit. Every name is checked, never interpolated unchecked (the module docstring): a request-chosen field is safe, but an unknown one matches nothing.
432
432
 
433
- ### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
433
+ ### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = (), *, ensure_edges: 'bool' = False) -> 'None'`
434
434
 
435
- Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write.
435
+ Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per (type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer.
436
436
 
437
437
  ### `kg_edges(ws: 'WorkspaceHandle', from_type: 'Optional[str]' = None, *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None, direction: 'str' = 'out', edge_type: 'Optional[str]' = None, edge_where: 'Optional[dict]' = None, target_where: 'Optional[dict]' = None, select: 'dict') -> 'list[dict]'`
438
438
 
@@ -182,7 +182,7 @@ Group into units (checked), attach table rows, extract each unit concurrently (p
182
182
 
183
183
  #### `IngestionStages.write(self, sd: 'Any', extractions: 'list') -> 'int'`
184
184
 
185
- Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
185
+ Persist the records (the domain's writer, else `kg_write` with idempotent edges). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
186
186
 
187
187
  #### `IngestionStages.write_document_node(self, doc_id: 'str', *, parent_id: 'Optional[str]', filename: 'str', media_type: 'str', sha256: 'str', metadata: 'Optional[dict]' = None) -> 'None'`
188
188
 
@@ -492,6 +492,10 @@ ASYNC twin of `chunk_texts` (SEG-2/SEG-5): awaits the discoverer's async boundar
492
492
 
493
493
  Validate a `documents` scope against `store.known_document_ids()` BEFORE any retrieval spends (mirrors issue 0007's `_validate_sources`). `None` (whole store) is not validated. `[]` (scope-to-nothing) is a valid empty scope, not an error -- the retrieval surfaces short-circuit it. A non-empty list with any id absent from the store raises `UnknownDocumentError`. A store without `known_document_ids` (a minimal fake) is treated as un-validatable and passes through.
494
494
 
495
+ ### `segment_layout(chunk_id: 'str', text: 'str', layout: 'Sequence[LayoutItem]', *, min_alnum: 'Optional[int]' = None, tuning: 'Optional[IngestionTuning]' = None) -> 'list[Span]'`
496
+
497
+ Segment one chunk into spans (the engine's default `Segmenter`). The fragment floor is `min_alnum`, else `tuning.min_fragment_alnum`, else the default.
498
+
495
499
  ### `capability_impl(name: 'str') -> 'Callable[..., Any]'`
496
500
 
497
501
  Resolve a capability name to its invoke factory via the manifest `impl_ref`. Raises `KeyError` if the name is unknown to the ARD catalog, `NotImplementedError` if it declares no `impl_ref` (not invokable by name).
@@ -53,13 +53,16 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
53
53
  - **Proposed:** a generic reader in `ontology.pack_schema` (or similar) over an engine-namespaced criterion
54
54
  vocabulary.
55
55
 
56
- ### G8: The default record writer is not fully idempotent
57
- - **Where:** with no `writer=`, `build_ingestion` writes with the store's `kg_write`: nodes are upserted by their key,
58
- but edges are created (`CREATE EDGE`), so re-ingesting a document duplicates its record edges. The store's
59
- idempotent `kg_ensure_edges` (used for `EmbeddedIn` / `AttachedTo`) is not exported from `rag_wright.api`.
60
- - **Impact:** a domain whose extractor returns edges must pass its own idempotent `writer`, or clear the document's
61
- records before a re-ingest.
62
- - **Proposed:** make the default writer use `kg_ensure_edges`, or export it.
56
+ ### G8: The default record writer is not fully idempotent (closed by PS-63)
57
+ - **Where:** with no `writer=`, `build_ingestion` wrote with the store's `kg_write`: nodes were upserted by their key,
58
+ but edges were created (`CREATE EDGE`).
59
+ - **Impact:** not only a re-ingest. Within ONE ingest of one document, an edge that several units emit (an entity
60
+ several rows mention, emitted by its key from each unit) landed once per unit, so a traversal over-counted while
61
+ node counts looked right (TexWright, 2026-10-15).
62
+ - **Closed by PS-63 (ADR-0142):** the default writer calls `kg_write(..., ensure_edges=True)`: at most one edge per
63
+ (type, from node, to node), within the write, across writes and across concurrent writers, the last props landing,
64
+ in the same one transaction. A domain `writer=` gets the same with `rag_wright.api.kg_write(ws, nodes, edges,
65
+ ensure_edges=True)`; without the flag `kg_write` still keeps parallel edges.
63
66
 
64
67
  ### G9: One domain pack per workspace through the public API
65
68
  - **Where:** `EngineConfig.pack` takes one `.ttl`. A second pack's schema needs the store-internal
@@ -34,6 +34,20 @@ The reference pack's contract pipeline is one instantiation of the same stages (
34
34
  legal segmenter, a function tagger, a provision grouper, a decision-model boundary decider, its clause extractor and
35
35
  its typed writer. Read it as an example of hooks, not as the engine's definition of ingestion.
36
36
 
37
+ A hook you pass replaces the default for the whole pipeline, for every document it ingests. When your documents
38
+ need the default's behaviour in most places and your own rule in a few, build on the default rather than replace it:
39
+ the default segmenter is `rag_wright.pack_sdk.segment_layout` (and the default chunk discoverer
40
+ `StructuralModelFallbackDiscoverer`), so your segmenter can call it and adjust only the spans it gets wrong:
41
+
42
+ ```python
43
+ from rag_wright.pack_sdk import segment_layout
44
+
45
+
46
+ def segmenter(chunk_id, text, layout):
47
+ spans = segment_layout(chunk_id, text, layout) # the engine's evaluated segmentation
48
+ return spans # split or merge here only the spans your domain reads differently; keep them tiling the text
49
+ ```
50
+
37
51
  ## The stages
38
52
 
39
53
  ```
@@ -169,8 +183,10 @@ the run goes on. Every node and edge type your extractor returns must be declare
169
183
 
170
184
  `aingest` returns an `IngestionReport` (`succeeded`, `failed`, `documents`). Each `DocumentReport` has the counts
171
185
  (`chunks`, `spans`, `units`, `records`), `extraction_failures`, `span_failures`, `dead_letter` (the reason, if the
172
- document failed), `skipped_hidden_sheets`, `embedded_skipped`, `children`, and the `links` / `unmapped_links` of its
173
- embedded files. Nothing is skipped silently.
186
+ document failed), `skipped_hidden_sheets`, `embedded_skipped`, `children`, the `links` / `unmapped_links` of its
187
+ embedded files, and `unreached_table_rows`: each record table some of whose data rows reached no unit carrying their
188
+ `TableRow`, so produced no record (`reached`, `total` and the `missing` row indices; also printed as an
189
+ `[ingest] warning:` line). Nothing is skipped silently.
174
190
 
175
191
  ## The two graphs (one store)
176
192
 
@@ -205,10 +221,11 @@ ask-first change.
205
221
  citation**.
206
222
  - **What is cached on a re-ingest:** in `build_ingestion`, parse and chunk are content-hash cached; spans,
207
223
  record nodes and the `Document` node are upserted by key; the `EmbeddedIn` / `AttachedTo` edges are ensured (never
208
- duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive), and the
209
- default writer creates record edges rather than ensuring them, so re-ingesting a document whose extractor returns
210
- edges duplicates them unless your `writer` is idempotent (engine gap G8). A boundary decider is not cached either
211
- (engine gap G6).
224
+ duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive). The
225
+ default writer ensures record edges too (PS-63): one edge per (type, from node, to node), whether several units
226
+ emit it or a re-ingest writes it again, with the last props landing; a domain `writer=` gets the same from
227
+ `kg_write(ws, nodes, edges, ensure_edges=True)`. A re-ingest does not remove records a document no longer yields.
228
+ A boundary decider is not cached either (engine gap G6).
212
229
 
213
230
  ## Building your own
214
231
 
@@ -131,4 +131,8 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
131
131
  | PS-57 | RuleWright's request (`docs/engine-requests/2026-10-31-a-write-conflict-loses-a-documents-clauses-and-your-pack-carries-the-defect.md`, their repo): at 4 concurrent documents, 2 of 15 reported `ingested` with zero clauses. The contracts pack's `write` node popped the pending extractions (filled by `extract_clauses`) before the store write landed, so the node's retry wrote nothing and reported success; it now reads them and releases them after the write. The conflict budget is reachable: `StoreConfig.conflict_attempts` / `conflict_backoff_cap_s`, else `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S`; default raised 10 attempts / 0.5 s cap to 20 / 2 s. Found by the live probe: two writers creating the same new node get a duplicate key, never retried; `kg_write` and `write_graph` (UPSERT-only) now retry it | pack retry test through the real per-document graph (0/3 clauses landed before, 3/3 after); six store tests; live probe (clause-shaped transactions over shared value nodes, pooled sessions): old budget lost 38/2,400 at 4 and 8 writers, new lost 0/2,400 at the same wall-clock; live store suite 42 passed | done 2026-11-01 |
132
132
  | PS-58 | RuleWright's request (`docs/engine-requests/2026-10-31-ingestionstages-write-returns-a-count-derived-from-its-own-input.md`, their repo): `IngestionStages.write` returned the record nodes it was handed, and `RecordWriter` (declared `-> None`) could not say what landed. A writer now returns the number of records in the graph (`Optional[int]`; `None` keeps the engine's count); the default `kg_write` branch keeps the handed-over count, true because that write is one transaction (lands whole or raises). The contracts pack's writer returns the clauses in the graph and its `write` node reports that as `clauses` | three hermetic tests + the PS-57 retry test's count (red before, green after); live `build_ingestion` on two fixtures: default and a writer landing every other record, `records` equals the graph in all four documents | done 2026-11-01 |
133
133
  | PS-59 | Found during PS-57: the ArcadeDB client opens a new connection for every request (`requests.post`, no session); at 8 concurrent writers against Docker on macOS about two thirds of writes failed with `RemoteDisconnected`, and with a keep-alive session per thread the same run lost none. Give the store's client a pooled session | live probe at 8 writers: zero connection drops | done 2026-11-01: the store's client (`_PooledClient`) keeps one keep-alive `requests.Session` per thread and `ArcadeDBStore.close()` releases them; live, the same probe lost 374 of 800 transactions to `RemoteDisconnected` unpooled and 0 of 800 at 8 writers and 0 of 1,600 at 16 pooled |
134
+ | PS-60 | TexWright (2026-11-05, `2026-11-05-export-the-default-segmenter-on-pack-sdk.md`): a table over the chunk cap was hard-split at a fixed length, mid-row; the rows after the cut lost their table layout (one span between them, no `TableRow`), and one item `chunk_layouts` could not place blocked every later item's layout. 4 of 140 records lost silently | the cut falls between lines and repeats the table's header in each continuation chunk; an unplaceable item no longer blocks later ones; a manifest cached with the old cut is re-chunked once; live: a 140-record x 76-column workbook yields 140 records | done 2026-11-05 (ADR-0141): live, the workbook (280 rows, two per record) gave 280/280 row records, 75/280 with the old cut |
135
+ | PS-61 | TexWright's question in the same request: the default segmenter `segment_layout` is on neither public tier, so a pack cannot wrap it | export it on `rag_wright.pack_sdk` | done 2026-11-05: `pack_sdk.segment_layout` (the engine's own object); the wrap-the-default pattern in `kg-construction.md` and the ingestion skill; a pack segmenter delegating to it runs through `build_ingestion` |
136
+ | PS-62 | TexWright, same request: the loss was silent (every `check_*` passed) | a record table whose rows do not each reach a unit with its `TableRow` is reported in the `IngestionReport` | done 2026-11-05: `DocumentReport.unreached_table_rows` (`table_ref`, `sheet`, `reached`, `total`, `missing`) and an `[ingest] warning:` line; a block table is not a loss; live, the pre-PS-60 cut on the workbook reports 75 of 280 rows reached (205 missing, matching the records lost), the new cut reports nothing |
137
+ | PS-63 | TexWright, `2026-10-15-g8-duplicates-edges-within-one-ingest.md` (gap G8): the default writer created every edge, so an edge several units emit (an entity several rows mention) landed once per unit, within one ingest and on every re-ingest | the default writer leaves one edge per (type, from node, to node); `api.kg_write` exposes the same; `kg_write` without the flag unchanged | done 2026-11-07: `kg_write(..., ensure_edges=)` (ADR-0142), the default writer passes it, `api.kg_write` exposes it; G8 closed, the ingestion skill and the KG-construction guide updated; live, TexWright's shape (140 children on two rows each, 20 parents) leaves 140 edges on an ingest and a re-ingest (280 then 560 before) |
134
138
  | PS-48 | Port the agent harness's substrate behaviour tests from RuleWright onto the engine's fabric fixture (ADR-0139 handover): of RuleWright's 553 harness-touching tests, 314 test the substrate (port), 213 RuleWright's composition (stay), 25 live (1 substrate: OpenRouter cost accounting). Seven gated sub-tasks: **a** shared `tests/harness/fabric.py` + scripting/slow/hanging/failing fake models + `InMemorySaver` helpers, then events, skills, clarify (~23); **b** models and errors (~42); **c** runs, confirm, continuation (~32); **d** decisions and rules (~51); **e** grading (~32); **f** seen and memory (~41); **g** workers, batch, dispatch, tiers, agent wiring, filesystem, interpreter, withhold + the live accounting test (~93, may split). Ambiguous tests split, not moved whole; a ported test failing on engine code is a substrate defect fixed in that sub-task; deadline globals via monkeypatch; no new dependencies. Follow-up (owner RuleWright): retire its substrate duplicates once ported | each sub-task's ported tests green on the fabric fixture | todo (proposed; awaiting go-ahead) |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rag-wright"
3
- version = "0.16.1"
3
+ version = "0.17.1"
4
4
  description = "A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.13"
@@ -22,7 +22,7 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
22
22
  |---|---|---|---|
23
23
  | parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown, images and scans; embedded files) | engine | docling, content-hash cached; images and scanned pages are OCR'd, and only degraded pages escalate to the vision model (the `VISION_OCR` role) | (none) |
24
24
  | chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
25
- | segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
25
+ | segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` (to adjust the default rather than replace it, wrap `pack_sdk.segment_layout`) |
26
26
  | tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
27
27
  | index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
28
28
  | group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
@@ -181,6 +181,9 @@ category.
181
181
  `evaluate_ingestion(..., table_labels=[{"pattern": <regex on the header row>, "label": "record"|"block"}])`
182
182
  (first match wins): a block table split per row, or a wide record table not split, is a failure, and tables no
183
183
  pattern matched are listed in `unlabelled_tables`.
184
+ - **Every row of a record table should reach a unit.** After an ingest, `DocumentReport.unreached_table_rows` lists
185
+ each record table whose rows did not all reach a unit with their `TableRow` (with the `[ingest] warning:` line);
186
+ an empty list on your samples is the check. Rows listed there produced no record.
184
187
  - **How an embedded file finds its row.** An identifier is a token of 4+ characters containing a digit that appears
185
188
  on at most `IdentifierRule.max_rows` table rows and in at most `max_files` embedded files (defaults 3 and 3; set
186
189
  them with `IngestionTuning(identifier=IdentifierRule(...))`). A file whose identifiers match no row, or too many,
@@ -196,7 +199,11 @@ category.
196
199
  - **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
197
200
  whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
198
201
  `document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
199
- mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key.
202
+ mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
203
+ emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
204
+ (PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
205
+ off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
206
+ provenance).
200
207
  - **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
201
208
  saver; the engine ships none) and a `run_id` naming the run:
202
209
  `await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
@@ -205,8 +212,9 @@ category.
205
212
  sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
206
213
  LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
207
214
  - **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
208
- key but is not fully idempotent for edges (engine gap G8): when a source is re-run, remove its previous records
209
- first (`kg_delete` on the provenance your records carry, such as a per-source property) and write again.
215
+ key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
216
+ source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
217
+ provenance your records carry, such as a per-source property) and write again.
210
218
 
211
219
  ## 6. Verify (definition of done)
212
220
 
@@ -62,11 +62,12 @@ def kg_update(ws: WorkspaceHandle, type_name: str, *, set: dict, where: Optional
62
62
  return ws._store.kg_update(type_name, set=set, where=where, key_range=key_range)
63
63
 
64
64
 
65
- def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = ()) -> None:
65
+ def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = (), *, ensure_edges: bool = False) -> None:
66
66
  """Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are
67
67
  `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type
68
- the workspace's schema does not declare fails the write."""
69
- ws._store.kg_write(nodes, edges)
68
+ the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per
69
+ (type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer."""
70
+ ws._store.kg_write(nodes, edges, ensure_edges=ensure_edges)
70
71
 
71
72
 
72
73
  def kg_edges(ws: WorkspaceHandle, from_type: Optional[str] = None, *, where: Optional[dict] = None,
@@ -25,6 +25,8 @@ from __future__ import annotations
25
25
 
26
26
  import asyncio
27
27
  import json
28
+ import logging
29
+ import re
28
30
  from pathlib import Path
29
31
  from typing import Any, Optional, Protocol, runtime_checkable
30
32
 
@@ -43,6 +45,8 @@ from rag_wright.models.profiles import ModelRole, model_for
43
45
  from rag_wright.models.seam import build_structured
44
46
  from rag_wright.skills.rlm.agent import build_rlm_agent, rlm_interpreter_session
45
47
 
48
+ _log = logging.getLogger(__name__)
49
+
46
50
  DEFAULT_TOKEN_CAP = 20_000
47
51
  DEFAULT_SUMMARY_CONCURRENCY = 8 # in-flight summary calls (backpressure); summaries are network-bound
48
52
  _SUMMARIZE_PROMPT = "Summarize this document chunk in one or two sentences, factually:"
@@ -518,10 +522,70 @@ def _estimate_tokens(text: str) -> int:
518
522
  return max(1, len(text) // 4)
519
523
 
520
524
 
525
+ _TABLE_LINE = re.compile(r"[ \t]*\|")
526
+ _TABLE_SEPARATOR = re.compile(r"[ \t]*\|?[ \t:|-]*-[ \t:|-]*\|?[ \t]*")
527
+
528
+
521
529
  def _hard_split(text: str, token_cap: int) -> list[str]:
522
- """Split text that alone exceeds the cap into <= cap-sized pieces (by chars)."""
523
- cap_chars = token_cap * 4
524
- return [text[i : i + cap_chars] for i in range(0, len(text), cap_chars)]
530
+ """Split text that alone exceeds the cap into pieces under the cap (by chars).
531
+
532
+ PS-60 (TexWright): each cut falls at the last blank line in the window's second half, else the last line break,
533
+ else the last space, and only a run with none of them is cut at a fixed length; the one whitespace character cut
534
+ at is dropped. A cut inside a pipe table repeats the table's header and separator rows at the top of the next
535
+ piece, so every piece is a well-formed table and every row stays whole: the old fixed-length cut fell mid-row,
536
+ and the rows after it lost their table layout, their own spans and their `TableRow`. Pieces stay strictly under
537
+ the cap, so a cached manifest holding a cap-length piece can only come from the old cut (`_stale_split`)."""
538
+ cap = token_cap * 4
539
+ pieces: list[str] = []
540
+ rest = text
541
+ floor = 0 # the carried header's length: a cut must fall after it, or the split would not advance
542
+ while len(rest) >= cap:
543
+ window = rest[: cap - 1]
544
+ blank = window.rfind("\n\n", max(floor, cap // 2))
545
+ line = window.rfind("\n", floor + 1)
546
+ space = max(window.rfind(" ", floor + 1), window.rfind("\t", floor + 1))
547
+ if blank > floor:
548
+ end, start = blank, blank + 2
549
+ elif line > floor:
550
+ end, start = line, line + 1
551
+ elif space > floor:
552
+ end, start = space, space + 1
553
+ else:
554
+ end = start = cap - 1
555
+ piece, rest = rest[:end], rest[start:]
556
+ pieces.append(piece)
557
+ header = _continued_table_header(piece, rest)
558
+ if header and len(header) < cap // 2:
559
+ rest, floor = f"{header}\n{rest}", len(header)
560
+ else:
561
+ floor = 0
562
+ if rest:
563
+ pieces.append(rest)
564
+ return pieces
565
+
566
+
567
+ def _stale_split(manifest: ChunkManifest) -> bool:
568
+ """PS-60: whether a cached manifest holds a table cut by the old fixed-length hard split, which made every piece
569
+ but the last exactly the cap long; `_hard_split` now keeps pieces under it. Only a piece holding table rows
570
+ counts: an old prose split keeps its cached chunks (re-chunking it would change nothing a reader relies on)."""
571
+ cap = manifest.token_cap * 4
572
+ return any(len(c.text) == cap and any(_TABLE_LINE.match(ln) for ln in c.text.split("\n"))
573
+ for c in manifest.chunks[:-1])
574
+
575
+
576
+ def _continued_table_header(piece: str, rest: str) -> str:
577
+ """The header and separator rows of the pipe table a cut fell inside (`piece` ends in it and `rest` continues
578
+ it), or "" when the cut is not inside a table or the table's header cannot be told."""
579
+ if not _TABLE_LINE.match(rest.split("\n", 1)[0]):
580
+ return ""
581
+ lines = piece.split("\n")
582
+ i = len(lines)
583
+ while i > 0 and _TABLE_LINE.match(lines[i - 1]):
584
+ i -= 1
585
+ block = lines[i:]
586
+ if len(block) >= 2 and _TABLE_SEPARATOR.fullmatch(block[1]):
587
+ return f"{block[0]}\n{block[1]}"
588
+ return ""
525
589
 
526
590
 
527
591
  _SEP = "\n\n"
@@ -745,7 +809,10 @@ def _chunk_prepare(parsed: ParsedDocument, cache_dir: Path, discoverer: Optional
745
809
  cache_dir.mkdir(parents=True, exist_ok=True)
746
810
  manifest_path = cache_dir / f"{parsed.source_doc_id}.{parsed.content_hash[:16]}.chunks.json"
747
811
  if manifest_path.exists(): # content-hash gate
748
- return ChunkManifest.model_validate_json(manifest_path.read_text(encoding="utf-8")), manifest_path, None, None
812
+ cached = ChunkManifest.model_validate_json(manifest_path.read_text(encoding="utf-8"))
813
+ if not _stale_split(cached):
814
+ return cached, manifest_path, None, None
815
+ _log.info("re-chunking %s: its cached chunks cut a table mid-row (PS-60)", parsed.source_doc_id)
749
816
  document = _as_content_view(load_document(parsed)) # issue 0014: chunk the reading-order body (incl. tables)
750
817
  disc = discoverer if discoverer is not None else SeamBoundaryDiscoverer(token_cap=token_cap)
751
818
  return None, manifest_path, document, disc