rag-wright 0.3.1__tar.gz → 0.4.0__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 (959) hide show
  1. {rag_wright-0.3.1/src/rag_wright/.agents → rag_wright-0.4.0/.claude}/skills/building-an-ingestion-capability/SKILL.md +9 -4
  2. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/creating-evals/SKILL.md +11 -0
  3. {rag_wright-0.3.1/src/rag_wright/.agents → rag_wright-0.4.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +14 -2
  4. rag_wright-0.4.0/.release-please-manifest.json +3 -0
  5. {rag_wright-0.3.1 → rag_wright-0.4.0}/CHANGELOG.md +19 -0
  6. {rag_wright-0.3.1 → rag_wright-0.4.0}/CLAUDE.md +4 -4
  7. {rag_wright-0.3.1 → rag_wright-0.4.0}/PKG-INFO +3 -2
  8. {rag_wright-0.3.1 → rag_wright-0.4.0}/README.md +2 -1
  9. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/ARCHITECTURE_OVERVIEW.md +2 -2
  10. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/api/README.md +18 -6
  11. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/api/pack_sdk.md +3 -9
  12. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/architecture.md +10 -0
  13. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/concepts.md +4 -2
  14. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/configuration.md +16 -2
  15. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/README.md +2 -1
  16. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/authoring-capabilities.md +6 -0
  17. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/kg-construction.md +33 -1
  18. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/public-surface/plan.md +7 -1
  19. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +7 -2
  20. rag_wright-0.4.0/docs/specs/public-surface/rulewright-migration-0.4.0.md +74 -0
  21. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/templates/product-starter/CLAUDE.md.template +2 -0
  22. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/templates/product-starter/playbook.md.template +2 -0
  23. rag_wright-0.4.0/docs/workspaces.md +76 -0
  24. {rag_wright-0.3.1 → rag_wright-0.4.0}/pyproject.toml +1 -1
  25. {rag_wright-0.3.1/.claude → rag_wright-0.4.0/src/rag_wright/.agents}/skills/building-an-ingestion-capability/SKILL.md +9 -4
  26. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +11 -0
  27. {rag_wright-0.3.1/.claude → rag_wright-0.4.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +14 -2
  28. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/__init__.py +4 -4
  29. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/invoke.py +4 -4
  30. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/workspace.py +39 -6
  31. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/__init__.py +1 -1
  32. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/answer_generator.py +1 -1
  33. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/manifests.py +2 -2
  34. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/rlm_chunking.py +1 -1
  35. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/vision_to_text.py +2 -2
  36. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/ingestion.py +26 -3
  37. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/builder.py +16 -6
  38. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/evaluate.py +126 -6
  39. rag_wright-0.4.0/src/rag_wright/models/__init__.py +8 -0
  40. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/profiles.py +30 -11
  41. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/pack_sdk/__init__.py +2 -2
  42. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +2 -2
  43. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +1 -1
  44. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +4 -2
  45. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/function_families.py +2 -2
  46. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +3 -3
  47. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +2 -2
  48. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +11 -7
  49. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +4 -1
  50. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/rlm/agent.py +2 -2
  51. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/store/arcadedb.py +2 -1
  52. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/util/concurrent.py +3 -1
  53. {rag_wright-0.3.1 → rag_wright-0.4.0}/tasks.md +5 -4
  54. rag_wright-0.4.0/tests/api/test_open_workspace_reconfig.py +84 -0
  55. rag_wright-0.4.0/tests/api/test_workspace_models.py +130 -0
  56. rag_wright-0.4.0/tests/ingestion/test_document_metadata.py +56 -0
  57. rag_wright-0.4.0/tests/ingestion/test_evaluate_labels.py +106 -0
  58. rag_wright-0.4.0/tests/models/test_no_gemma_default.py +42 -0
  59. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_profile_seam.py +1 -1
  60. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_clause_function_classifier.py +15 -0
  61. rag_wright-0.4.0/tests/store/test_document_metadata_live.py +57 -0
  62. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_kg_read.py +8 -0
  63. {rag_wright-0.3.1 → rag_wright-0.4.0}/uv.lock +1 -1
  64. rag_wright-0.3.1/.release-please-manifest.json +0 -3
  65. rag_wright-0.3.1/src/rag_wright/models/__init__.py +0 -8
  66. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/settings.json +0 -0
  67. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  68. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  69. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/laya/SKILL.md +0 -0
  70. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  71. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  72. {rag_wright-0.3.1 → rag_wright-0.4.0}/.claude/skills/setfit/SKILL.md +0 -0
  73. {rag_wright-0.3.1 → rag_wright-0.4.0}/.env.example +0 -0
  74. {rag_wright-0.3.1 → rag_wright-0.4.0}/.github/workflows/publish.yml +0 -0
  75. {rag_wright-0.3.1 → rag_wright-0.4.0}/.github/workflows/release-please.yml +0 -0
  76. {rag_wright-0.3.1 → rag_wright-0.4.0}/.gitignore +0 -0
  77. {rag_wright-0.3.1 → rag_wright-0.4.0}/LICENSE +0 -0
  78. {rag_wright-0.3.1 → rag_wright-0.4.0}/SPEC.md +0 -0
  79. {rag_wright-0.3.1 → rag_wright-0.4.0}/conftest.py +0 -0
  80. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/ArcadeDB_Local.md +0 -0
  81. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/OBSERVABILITY.md +0 -0
  82. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  83. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  84. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  85. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  86. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0005-relational-golden-set.md +0 -0
  87. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0006-model-profile.md +0 -0
  88. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  89. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  90. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  91. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  92. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  93. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  94. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  95. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  96. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  97. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  98. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  99. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  100. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  101. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  102. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  103. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  104. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  105. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  106. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  107. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  108. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  109. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  110. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  111. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  112. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  113. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  114. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  115. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  116. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  117. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  118. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  119. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  120. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  121. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  122. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  123. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  124. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  125. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  126. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  127. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  128. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  129. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  130. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  131. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  132. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  133. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  134. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  135. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  136. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  137. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  138. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  139. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  140. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  141. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  142. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  143. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  144. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  145. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  146. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  147. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  148. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  149. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  150. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  151. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  152. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  153. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  154. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  155. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  156. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  157. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  158. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  159. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  160. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  161. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  162. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  163. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  164. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  165. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  166. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  167. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  168. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  169. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  170. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  171. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  172. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  173. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  174. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  175. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  176. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0095-span-page-provenance.md +0 -0
  177. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  178. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  179. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  180. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  181. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  182. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  183. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  184. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  185. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  186. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  187. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  188. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  189. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  190. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  191. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  192. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  193. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  194. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  195. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  196. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  197. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  198. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  199. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  200. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  201. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  202. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  203. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  204. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  205. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  206. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  207. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  208. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  209. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  210. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/adr/README.md +0 -0
  211. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  212. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/README.md +0 -0
  213. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  214. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  215. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  216. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  217. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  218. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  219. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  220. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  221. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  222. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  223. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  224. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  225. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  226. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  227. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  228. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  229. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  230. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  231. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  232. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  233. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  234. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  235. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  236. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  237. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  238. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  239. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  240. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  241. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  242. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  243. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  244. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  245. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  246. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  247. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  248. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  249. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  250. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  251. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  252. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  253. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  254. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  255. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  256. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  257. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  258. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  259. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  260. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  261. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  262. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  263. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  264. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  265. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  266. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  267. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  268. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  269. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  270. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  271. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  272. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  273. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  274. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/misc/.gitkeep +0 -0
  275. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  276. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/async-migration.md +0 -0
  277. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/demo_plan.md +0 -0
  278. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  279. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  280. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  281. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  282. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  283. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  284. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/contract_pipeline_explainer.md +0 -0
  285. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/corpus_ingest_recipe.md +0 -0
  286. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
  287. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  288. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  289. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  290. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/classifier_model_ab.md +0 -0
  291. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/compliance_demo.md +0 -0
  292. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/compliance_gate_cc7.md +0 -0
  293. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  294. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  295. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/dg_model_ab.md +0 -0
  296. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/function_gate_recall.md +0 -0
  297. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  298. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  299. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/ocr_benchmark.md +0 -0
  300. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/prod1_readiness.md +0 -0
  301. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/prod2_readiness.md +0 -0
  302. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/query_side_model_ab.md +0 -0
  303. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  304. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/silver_provider_routing.md +0 -0
  305. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  306. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/installation.md +0 -0
  307. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/playbook.md +0 -0
  308. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/capability_profiles.md +0 -0
  309. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/contracts_product_roadmap.md +0 -0
  310. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/engine-api-migration-handoff.md +0 -0
  311. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/engine_async_api.md +0 -0
  312. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/new-domain-build-sequence.md +0 -0
  313. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/product/seam-adaptation-guide.md +0 -0
  314. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  315. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  316. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  317. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/proposals/ontology-induction.md +0 -0
  318. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/quickstart.md +0 -0
  319. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/reference-pack.md +0 -0
  320. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/releasing.md +0 -0
  321. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/engine-platform/SPEC.md +0 -0
  322. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/engine-platform/TASKS.md +0 -0
  323. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/engine-prep/plan.md +0 -0
  324. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  325. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  326. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  327. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  328. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/templates/product-starter/README.md +0 -0
  329. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/templates/product-starter/dependabot.yml +0 -0
  330. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  331. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  332. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  333. {rag_wright-0.3.1 → rag_wright-0.4.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  334. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/__init__.py +0 -0
  335. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/acord.py +0 -0
  336. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/acord_retrieval.py +0 -0
  337. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/boundary_residue_gold.py +0 -0
  338. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/build_golden.py +0 -0
  339. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  340. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  341. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  342. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  343. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/condensed_pipeline.py +0 -0
  344. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/contract_parity_live.py +0 -0
  345. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/contractnli_judge.py +0 -0
  346. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/cuad_highlight.py +0 -0
  347. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/embedded_eval.py +0 -0
  348. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/full_pipeline_rerank.py +0 -0
  349. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/function_ceiling.py +0 -0
  350. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/function_property_rerank.py +0 -0
  351. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/function_rerank.py +0 -0
  352. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/gate1_chunker_ab.py +0 -0
  353. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/gate2_hybrid_rerank.py +0 -0
  354. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/golden/relational/set.json +0 -0
  355. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/golden.py +0 -0
  356. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/ground_discriminator_rerank.py +0 -0
  357. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/harness.py +0 -0
  358. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/ingestion_live_smoke.py +0 -0
  359. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/kg_primary.py +0 -0
  360. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/kg_property_rerank.py +0 -0
  361. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/listwise_rerank.py +0 -0
  362. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/multihop.py +0 -0
  363. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/nl_to_type.py +0 -0
  364. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/relational_eval.py +0 -0
  365. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/residual_decision_gold.py +0 -0
  366. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/segmenter_eval.py +0 -0
  367. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/semantic_judge_gold.py +0 -0
  368. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/test_acord.py +0 -0
  369. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/test_acord_retrieval.py +0 -0
  370. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/test_harness.py +0 -0
  371. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/test_multihop_set.py +0 -0
  372. {rag_wright-0.3.1 → rag_wright-0.4.0}/eval/unit_grouper_eval.py +0 -0
  373. {rag_wright-0.3.1 → rag_wright-0.4.0}/examples/quickstart.py +0 -0
  374. {rag_wright-0.3.1 → rag_wright-0.4.0}/plan.md +0 -0
  375. {rag_wright-0.3.1 → rag_wright-0.4.0}/release-please-config.json +0 -0
  376. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ab_model_overlap.py +0 -0
  377. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acord_unify.py +0 -0
  378. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_acord.py +0 -0
  379. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_cuad.py +0 -0
  380. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_ecfr.py +0 -0
  381. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_edgar.py +0 -0
  382. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_ftc_255.py +0 -0
  383. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/acquire_prod1_corpus.py +0 -0
  384. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/audit_reclass_flips.py +0 -0
  385. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/author_leg_a_silver_key.py +0 -0
  386. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/backfill_affiliations.py +0 -0
  387. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/backfill_clause_span_id.py +0 -0
  388. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  389. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/backup_kg_to_gcs.sh +0 -0
  390. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/bootstrap_template_capture.py +0 -0
  391. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/bootstrap_typed_edges.py +0 -0
  392. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/build_api_docs.py +0 -0
  393. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/build_api_docs.sh +0 -0
  394. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/build_cuad_clause_cache.py +0 -0
  395. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/build_function_routing_map.py +0 -0
  396. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_assemble_v2.py +0 -0
  397. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_assemble_v3.py +0 -0
  398. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  399. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_generate_hard_positives.py +0 -0
  400. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_generate_training.py +0 -0
  401. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_hybrid.py +0 -0
  402. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_hybrid2.py +0 -0
  403. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_jev_actor.py +0 -0
  404. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_jev_claimtypes.py +0 -0
  405. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_jev_operative.py +0 -0
  406. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_label_spans.py +0 -0
  407. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_laya_prep.py +0 -0
  408. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_laya_train.py +0 -0
  409. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_prep_operative.py +0 -0
  410. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_relabel_rubric.py +0 -0
  411. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_relabel_rubric2.py +0 -0
  412. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/cic1_train_operative.py +0 -0
  413. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/compare_extraction_models.py +0 -0
  414. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  415. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/compliance_engine_smoke.py +0 -0
  416. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/compliance_policy_demo.py +0 -0
  417. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/curate_taxonomy_gaps.py +0 -0
  418. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/dg_model_ab.py +0 -0
  419. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  420. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  421. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  422. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_legs.py +0 -0
  423. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_pool.py +0 -0
  424. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_relstructure.py +0 -0
  425. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/diagnose_acord_retrieval.py +0 -0
  426. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/eval_all.py +0 -0
  427. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/eval_ce.py +0 -0
  428. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/eval_listwise_b.py +0 -0
  429. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/export_ce_dataset.py +0 -0
  430. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/extract_features.py +0 -0
  431. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/listwise_variants.py +0 -0
  432. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/relational_features.py +0 -0
  433. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/train_ce.py +0 -0
  434. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/distill/train_modal.py +0 -0
  435. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/enrich_edgar_candidates.py +0 -0
  436. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/eval_chunking_ab.py +0 -0
  437. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  438. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/eval_compliance_gold.py +0 -0
  439. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/extract_arcadedb_docs.py +0 -0
  440. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/fetch_reference_models.py +0 -0
  441. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/generate_contract_python.py +0 -0
  442. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/git_post_commit_graphify.sh +0 -0
  443. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/granite_chunker_assess.py +0 -0
  444. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/graph_status.sh +0 -0
  445. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_acord.py +0 -0
  446. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  447. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  448. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_compliance_prod2.py +0 -0
  449. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_cuad.py +0 -0
  450. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_cuad_full.py +0 -0
  451. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_ftc_compliance.py +0 -0
  452. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_prod1.py +0 -0
  453. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_prod1_async.py +0 -0
  454. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ingest_smoke.py +0 -0
  455. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/install_git_hooks.sh +0 -0
  456. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/label_new_functions.py +0 -0
  457. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/legb_function_gate_recall.py +0 -0
  458. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/make_compliance_fixtures.py +0 -0
  459. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/make_compliance_gold.py +0 -0
  460. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  461. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  462. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  463. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/measure_generation_robustness.py +0 -0
  464. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/measure_silver.py +0 -0
  465. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/merge_docs_into_framework.py +0 -0
  466. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  467. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  468. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  469. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/migrate_span_fields.py +0 -0
  470. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/mine_scarce_functions.py +0 -0
  471. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_arcadedb.py +0 -0
  472. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_backfill.py +0 -0
  473. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_exception_linking.py +0 -0
  474. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_gemma4_vllm.py +0 -0
  475. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  476. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_granite_server.py +0 -0
  477. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_granite_throughput.py +0 -0
  478. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_granite_vllm_server.py +0 -0
  479. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_query_app.py +0 -0
  480. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  481. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  482. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  483. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/modal_stack_a100.py +0 -0
  484. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ocr_benchmark.py +0 -0
  485. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ocr_preprocess.py +0 -0
  486. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/ontology_dimension_check.py +0 -0
  487. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/phase_a_leg_validate.py +0 -0
  488. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/populate_clause_kg.py +0 -0
  489. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/populate_entity_graph.py +0 -0
  490. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/populate_entity_graph_extracted.py +0 -0
  491. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/populate_property_store.py +0 -0
  492. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/prep_relational_verification.py +0 -0
  493. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/publish_manifests.py +0 -0
  494. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/reclassify_kg.py +0 -0
  495. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/refresh_framework_graph.sh +0 -0
  496. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/revert_reclass_flips.py +0 -0
  497. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/run_acord_retrieval.py +0 -0
  498. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/run_clause_exception_linking.py +0 -0
  499. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/semantic_judge_live_validate.py +0 -0
  500. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/semantic_judge_probe.py +0 -0
  501. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/snapshot_leg_a_eval.py +0 -0
  502. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/stack_correctness_validate.py +0 -0
  503. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/table_retrieval_smoke.py +0 -0
  504. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/train_function_classifier.py +0 -0
  505. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/train_legalbert_function.py +0 -0
  506. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/train_legalbert_modal.py +0 -0
  507. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/typed_rerank_validate.py +0 -0
  508. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/verify_wheel_install.sh +0 -0
  509. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/vllm_extraction_ab.py +0 -0
  510. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/vllm_kg_query_validate.py +0 -0
  511. {rag_wright-0.3.1 → rag_wright-0.4.0}/scripts/vllm_raw_diagnostic.py +0 -0
  512. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  513. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  514. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  515. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  516. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  517. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  518. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/__init__.py +0 -0
  519. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/answers.py +0 -0
  520. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/config.py +0 -0
  521. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/discover.py +0 -0
  522. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/documents.py +0 -0
  523. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/ids.py +0 -0
  524. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/kg.py +0 -0
  525. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/mcp.py +0 -0
  526. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/tracing.py +0 -0
  527. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/api/usage.py +0 -0
  528. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/ard.py +0 -0
  529. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  530. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  531. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  532. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  533. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  534. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/embedding.py +0 -0
  535. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  536. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  537. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/fusion.py +0 -0
  538. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  539. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  540. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  541. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/invoke.py +0 -0
  542. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  543. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/parsing.py +0 -0
  544. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/registry.py +0 -0
  545. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  546. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/reranking.py +0 -0
  547. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  548. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  549. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  550. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  551. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  552. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/__init__.py +0 -0
  553. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/chunk.py +0 -0
  554. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/extraction.py +0 -0
  555. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/graph.py +0 -0
  556. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/identifiers.py +0 -0
  557. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/provenance.py +0 -0
  558. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/contracts/span.py +0 -0
  559. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/corpus/__init__.py +0 -0
  560. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  561. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/corpus/document_parser.py +0 -0
  562. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/corpus/embedded.py +0 -0
  563. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/corpus/http.py +0 -0
  564. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/__init__.py +0 -0
  565. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/group.py +0 -0
  566. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/layout.py +0 -0
  567. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/segment.py +0 -0
  568. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ingestion/tables.py +0 -0
  569. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/seam.py +0 -0
  570. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/tag_structured.py +0 -0
  571. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/tracing.py +0 -0
  572. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/usage.py +0 -0
  573. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/models/weights.py +0 -0
  574. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ontology/__init__.py +0 -0
  575. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  576. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/ontology/registry.py +0 -0
  577. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/__init__.py +0 -0
  578. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  579. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  580. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  581. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  582. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  583. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  584. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  585. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  586. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  587. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  588. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  589. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  590. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  591. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  592. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  593. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  594. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  595. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  596. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  597. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  598. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  599. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  600. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  601. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  602. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  603. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  604. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  605. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  606. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  607. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  608. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  609. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  610. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  611. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  612. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  613. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  614. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  615. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  616. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  617. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  618. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  619. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  620. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  621. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  622. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  623. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  624. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  625. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  626. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  627. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  628. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  629. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  630. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  631. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  632. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  633. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  634. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  635. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  636. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  637. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  638. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/options.py +0 -0
  639. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  640. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  641. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  642. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  643. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  644. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  645. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  646. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  647. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  648. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  649. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  650. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  651. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  652. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  653. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  654. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  655. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  656. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  657. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  658. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  659. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  660. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  661. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  662. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  663. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  664. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  665. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  666. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  667. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  668. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  669. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  670. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  671. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  672. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  673. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  674. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  675. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  676. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  677. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  678. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  679. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  680. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  681. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  682. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/packs/reference_seam.py +0 -0
  683. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/py.typed +0 -0
  684. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/__init__.py +0 -0
  685. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  686. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  687. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  688. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  689. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  690. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  691. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  692. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/spans/__init__.py +0 -0
  693. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/spans/page_map.py +0 -0
  694. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/store/__init__.py +0 -0
  695. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/store/chunk_text.py +0 -0
  696. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/store/seam.py +0 -0
  697. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  698. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  699. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/subgraphs/observability.py +0 -0
  700. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  701. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  702. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/util/__init__.py +0 -0
  703. {rag_wright-0.3.1 → rag_wright-0.4.0}/src/rag_wright/util/spacy_model.py +0 -0
  704. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/__init__.py +0 -0
  705. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/__init__.py +0 -0
  706. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_answers_exports.py +0 -0
  707. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_bytes_ingest.py +0 -0
  708. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_capability_reexports.py +0 -0
  709. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  710. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_discover.py +0 -0
  711. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_documents.py +0 -0
  712. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_e2e.py +0 -0
  713. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_invoke.py +0 -0
  714. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_kg.py +0 -0
  715. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_mcp.py +0 -0
  716. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_metering_tracing_exports.py +0 -0
  717. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_model_role_export.py +0 -0
  718. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_options.py +0 -0
  719. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_pack_sdk.py +0 -0
  720. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_pack_store.py +0 -0
  721. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_usage.py +0 -0
  722. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/api/test_workspace.py +0 -0
  723. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  724. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_api_docs_current.py +0 -0
  725. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_doc_references.py +0 -0
  726. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  727. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_import_contracts.py +0 -0
  728. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  729. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/arch/test_shipped_skills.py +0 -0
  730. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/async_helpers.py +0 -0
  731. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/__init__.py +0 -0
  732. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  733. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_answer_generator.py +0 -0
  734. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  735. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  736. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_authoring_contract.py +0 -0
  737. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_chunk_read.py +0 -0
  738. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_chunk_write.py +0 -0
  739. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  740. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_claim_extraction.py +0 -0
  741. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  742. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  743. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_compliance_store.py +0 -0
  744. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  745. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  746. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  747. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  748. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_dg_adapter.py +0 -0
  749. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_dg_async.py +0 -0
  750. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_dg_extraction.py +0 -0
  751. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  752. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_dg_private.py +0 -0
  753. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_disambiguation.py +0 -0
  754. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_document_scope.py +0 -0
  755. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_embedding.py +0 -0
  756. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  757. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_entity_resolution.py +0 -0
  758. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  759. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_fusion.py +0 -0
  760. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_graph_extraction.py +0 -0
  761. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_graph_query.py +0 -0
  762. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_graph_storage.py +0 -0
  763. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_highlight_serve.py +0 -0
  764. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_hybrid_search.py +0 -0
  765. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_jev_decision.py +0 -0
  766. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_manifest_validation.py +0 -0
  767. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_manifests.py +0 -0
  768. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_parsing.py +0 -0
  769. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_parties_extraction.py +0 -0
  770. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  771. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  772. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_query_understanding.py +0 -0
  773. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_registry.py +0 -0
  774. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_remote_encoders.py +0 -0
  775. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_repair_partition.py +0 -0
  776. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  777. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_reranking.py +0 -0
  778. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_retrieval_core.py +0 -0
  779. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  780. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  781. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_rlm_method.py +0 -0
  782. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  783. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_runtime_registry.py +0 -0
  784. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_scan_quality.py +0 -0
  785. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  786. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  787. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  788. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  789. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  790. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  791. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/compliance_fakes.py +0 -0
  792. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/conftest.py +0 -0
  793. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/__init__.py +0 -0
  794. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  795. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_chunk_record.py +0 -0
  796. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_compliance.py +0 -0
  797. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  798. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_extraction.py +0 -0
  799. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_function.py +0 -0
  800. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_function_routing.py +0 -0
  801. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_identifiers.py +0 -0
  802. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  803. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_jurisdiction.py +0 -0
  804. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_ontology.py +0 -0
  805. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_property.py +0 -0
  806. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_provenance.py +0 -0
  807. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/contracts/test_value_match.py +0 -0
  808. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/__init__.py +0 -0
  809. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  810. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_canonicalize.py +0 -0
  811. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_cuad.py +0 -0
  812. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  813. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_document_parser.py +0 -0
  814. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_edgar.py +0 -0
  815. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_embedded.py +0 -0
  816. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  817. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_http.py +0 -0
  818. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_parse_wire2.py +0 -0
  819. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/corpus/test_selection.py +0 -0
  820. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/eval/test_contractnli_judge.py +0 -0
  821. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  822. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/eval/test_kg_property_rerank.py +0 -0
  823. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  824. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/eval/test_relational_eval.py +0 -0
  825. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  826. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  827. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  828. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  829. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  830. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  831. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/foundation/__init__.py +0 -0
  832. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  833. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/foundation/test_model_seam_structured.py +0 -0
  834. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/__init__.py +0 -0
  835. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_builder.py +0 -0
  836. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  837. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_evaluate.py +0 -0
  838. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  839. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  840. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_table_rows.py +0 -0
  841. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_tuning.py +0 -0
  842. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_unit_grouper.py +0 -0
  843. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ingestion/test_unit_representative.py +0 -0
  844. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/journey/incidents_domain.py +0 -0
  845. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/journey/incidents_pack.ttl +0 -0
  846. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/journey/test_incidents_journey.py +0 -0
  847. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/journey/test_pack_schema.py +0 -0
  848. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/__init__.py +0 -0
  849. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/test_compliance_server.py +0 -0
  850. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  851. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  852. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/test_relational_qa_server.py +0 -0
  853. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  854. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/__init__.py +0 -0
  855. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_async_infra.py +0 -0
  856. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_models_dir.py +0 -0
  857. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_profile_routing.py +0 -0
  858. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_seam_async.py +0 -0
  859. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_seam_retry.py +0 -0
  860. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_seam_stream.py +0 -0
  861. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_serving_seam.py +0 -0
  862. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_serving_wiring.py +0 -0
  863. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_tag_structured.py +0 -0
  864. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_tag_structured_async.py +0 -0
  865. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_tracing.py +0 -0
  866. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/models/test_usage.py +0 -0
  867. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/__init__.py +0 -0
  868. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_clause_template.py +0 -0
  869. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  870. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_derivation.py +0 -0
  871. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  872. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  873. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  874. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  875. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  876. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/reference/test_compliance_reference.py +0 -0
  877. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/reference/test_contract_seam.py +0 -0
  878. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  879. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  880. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  881. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/skills/__init__.py +0 -0
  882. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  883. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_boundary.py +0 -0
  884. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  885. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  886. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  887. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  888. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  889. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_dim_classifier.py +0 -0
  890. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_dim_fleet_live.py +0 -0
  891. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_function_classifier.py +0 -0
  892. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_hybrid_classifier.py +0 -0
  893. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  894. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_legalbert_classifier.py +0 -0
  895. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_model_capabilities.py +0 -0
  896. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_new_function_labels.py +0 -0
  897. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_page_map.py +0 -0
  898. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_property_extractor.py +0 -0
  899. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_property_grounding.py +0 -0
  900. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_reclassify.py +0 -0
  901. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_residual_decision.py +0 -0
  902. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_scarce_function_labels.py +0 -0
  903. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_segment.py +0 -0
  904. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_segmentation_vocab.py +0 -0
  905. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_semantic_judge.py +0 -0
  906. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  907. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_setfit_probabilities.py +0 -0
  908. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_span_offsets.py +0 -0
  909. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_stage_labels_0005.py +0 -0
  910. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_symbolic_validation.py +0 -0
  911. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  912. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/__init__.py +0 -0
  913. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_affiliation_backfill.py +0 -0
  914. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  915. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_contract.py +0 -0
  916. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_property.py +0 -0
  917. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  918. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_schema.py +0 -0
  919. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_arcadedb_span.py +0 -0
  920. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_chunk_text.py +0 -0
  921. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_concurrent_writes.py +0 -0
  922. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_contract_kg_store_live.py +0 -0
  923. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_document_scope.py +0 -0
  924. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_engine_domain_neutral.py +0 -0
  925. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_entities_by_name.py +0 -0
  926. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_kg_edges.py +0 -0
  927. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_kg_mutations.py +0 -0
  928. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_kg_write.py +0 -0
  929. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_neutral_schema.py +0 -0
  930. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/store/test_write_graph_idempotent.py +0 -0
  931. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/__init__.py +0 -0
  932. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  933. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  934. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_clause_results.py +0 -0
  935. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_compliance_check.py +0 -0
  936. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  937. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  938. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  939. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  940. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  941. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  942. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  943. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  944. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_observability.py +0 -0
  945. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  946. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  947. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_relational_qa.py +0 -0
  948. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  949. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_scaffold.py +0 -0
  950. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  951. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  952. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  953. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/test_backfill_clause_span_id.py +0 -0
  954. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/test_dg_model_ab.py +0 -0
  955. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/test_populate_clause_kg.py +0 -0
  956. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/test_populate_entity_graph.py +0 -0
  957. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/util/__init__.py +0 -0
  958. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/util/test_concurrent.py +0 -0
  959. {rag_wright-0.3.1 → rag_wright-0.4.0}/tests/util/test_spacy_model.py +0 -0
@@ -49,7 +49,9 @@ The unit is the text one extractor call reads. Get it right first; every other c
49
49
  - Units are capped at `IngestionTuning.max_unit_chars` (default 6000); a split table repeats its header row in each
50
50
  continuation unit.
51
51
  - A source is a file path or uploaded bytes: `IngestSource(path=...)`, or `IngestSource(data=..., name=...)` (the
52
- name's extension picks the format), so an upload from object storage needs no temp file.
52
+ name's extension picks the format), so an upload from object storage needs no temp file. Attach your own fields to
53
+ a document with `IngestSource(metadata={...})`: they land on its `Document` node (and its embedded files') in the
54
+ same write, for `kg_read(ws, "Document", where=...)` to filter on.
53
55
  - If your documents mark units in a way layout does not show (a numbering scheme, a domain heading convention),
54
56
  override `unit_grouper=` or pass a `boundary_decider=` (candidate line texts -> "starts a new unit?" per text) to
55
57
  settle the lines the default grouper is unsure of. Domain conventions belong in your pack, never in the engine.
@@ -59,8 +61,10 @@ The unit is the text one extractor call reads. Get it right first; every other c
59
61
  Without it a unit is represented by its first member, which is usually its heading: the weakest text to tag and a
60
62
  poor citation. The reference contracts pack passes `provision_vote` (ADR-0126): the label with the highest
61
63
  probability summed over the non-heading members, cited by the member most confident in it; on 510 CUAD contracts
62
- that beat heading-first by about 10 points. Measure your own rule on a gold set of your documents before choosing
63
- it (the creating-evals skill).
64
+ that beat heading-first by about 10 points. Build the gold BEFORE you choose a rule: for a sample of your documents,
65
+ a short snippet from each unit you can label, with its expected label. Then compare rules with
66
+ `evaluate_ingestion(..., span_tagger=..., unit_representative=..., unit_labels=...)` (leave out
67
+ `unit_representative` for the first-member baseline) and keep the rule that labels best (the creating-evals skill).
64
68
 
65
69
  ## 3. Declare your record types in the pack `.ttl`
66
70
 
@@ -143,7 +147,8 @@ network-bound work inside it; the engine runs up to `IngestionTuning.extract_con
143
147
 
144
148
  ## 6. Verify (definition of done)
145
149
 
146
- 1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one).
150
+ 1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one). If your
151
+ units carry labels, its `labels` report on your gold meets the bar you set, with the confusions understood.
147
152
  2. A live ingest of that sample: no dead letters, `extraction_failures` explained, records cite spans
148
153
  (`kg_read(ws, "<your type>", fields=["span_id"])`), and `span_positions(ws, doc_id)` gives the citation positions.
149
154
  3. A hermetic test of your extractor on fixed units (no model calls in the default suite; the engine's test network
@@ -90,6 +90,17 @@ on a diagnostic).
90
90
  - **Ingestion structure**: `evaluate_ingestion` (in `rag_wright.api`) is the packaged structural eval of the
91
91
  ingestion hooks (tiling, table-row integrity, layout respect, coverage) on your own sample documents. Gate
92
92
  patterns: `eval/segmenter_eval.py`, `eval/unit_grouper_eval.py`.
93
+ - **Unit labelling** (when a unit's leading tag is a label something acts on): the same call with your
94
+ `span_tagger`, any `unit_representative` and `unit_labels`, the gold `{<file name>: [{"text": <a snippet that
95
+ occurs in exactly one unit>, "label": <expected, "" for none>}]}`. It needs no knowledge graph, so build it before
96
+ the first ingest: label the units of a representative sample (headings, short fragments and units that should
97
+ carry no label included, not only clean examples). `labels` reports accuracy, per-label recall and precision, and
98
+ the confusion pairs, scored per unit. A snippet found in no unit or in several, and a unit whose snippets carry
99
+ different labels, are failures, because that gold cannot be scored (if your units hold several labelled things,
100
+ label the unit, not each thing in it).
101
+ Compare candidate representatives (and the first-member baseline) on the same gold. Reference example, numbers
102
+ only: the reference pack chose its rule this way on 510 documents with gold (ADR-0126): a vote over the non-heading
103
+ members labelled 56.6% of units correctly, against 46.8% for the first member (usually the heading).
93
104
 
94
105
  ## 3. Build the gold cheaply (without faking it)
95
106
  - **Silver bootstrapping**: a higher-capability teacher (LLM, or a decision model) labels candidate items; CURATE
@@ -33,7 +33,8 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
33
33
  `IngestionReport`), its hook contracts (`Segmenter`, `SpanTagger`, `UnitGrouper`, `BoundaryDecider`,
34
34
  `UnitRepresentative`, `BoundaryDiscoverer` with `default_chunk_discoverer(guidance=...)`, `Extractor`,
35
35
  `RecordWriter`, `DocumentHook`, checked by `check_tiling`/`check_units`/`check_extraction`), `IngestionTuning`,
36
- `IngestSource` (a `path`, or `data` + `name` for bytes; `table_mode`, `include_hidden_sheets`) and
36
+ `IngestSource` (a `path`, or `data` + `name` for bytes; `table_mode`, `include_hidden_sheets`, your own `metadata`
37
+ for the document's `Document` node) and
37
38
  `evaluate_ingestion`. Your **pack's own code** (its capabilities, stores, graphs) also imports
38
39
  `rag_wright.pack_sdk`: identifiers and provenance, the model seam, the LangGraph scaffold, the `Store` protocol, the
39
40
  entity-graph building blocks (`build_graph_extraction`, `disambiguate`, `resolve_entities`, `EntityRules`,
@@ -67,6 +68,16 @@ contract/compliance worked example. The engine's `src/rag_wright/packs/reference
67
68
  registers in its constructor). Without it `ainvoke_subgraph` raises `KeyError` and the decision-model paths fall back
68
69
  silently to the LLM.
69
70
 
71
+ The catalog is **one per process** (a known limitation): it is shared by every workspace, and registering a slug
72
+ replaces it for all of them. Workspaces can differ in store, corpus and configuration, not in which implementation a
73
+ slug resolves to. Tenants that need different implementations of one slug run in separate processes, or use one slug
74
+ per implementation chosen per tenant in your code.
75
+
76
+ **Workspaces.** One corpus and one `EngineConfig` per tenant, a `cache_dir` per tenant, document metadata on
77
+ `IngestSource(metadata=...)`; models follow the workspace's `EngineConfig.models` in every call that takes it
78
+ (`use_workspace_models(ws)` for a call that does not). To change a tenant's config, open its corpus again with the
79
+ new config: a different config replaces the cached handle, no restart needed. `docs/workspaces.md` lists what applies per workspace, per call and per process.
80
+
70
81
  Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`) are in the engine repository: read them there or on GitHub, at the tag matching your installed engine.
71
82
 
72
83
  ## 2. Ground before you write (graphify)
@@ -97,7 +108,8 @@ The engine's `docs/` are NOT shipped in the wheel — read them in the engine re
97
108
  or on GitHub. Start with **Concepts** and **Architecture**, then the **domain-adaptation guide**
98
109
  (`docs/domain-adaptation/README.md`) — the 9-step sequence this skill operationalizes — and its companions
99
110
  (ontology authoring, KG construction, entity resolution, authoring capabilities, classification & decision models),
100
- plus **Quickstart**, **Reference pack**, and the generated **API reference** (`docs/api/`).
111
+ plus **Quickstart**, **Workspaces** (`docs/workspaces.md`: per workspace, per call, per process), **Reference
112
+ pack**, and the generated **API reference** (`docs/api/`).
101
113
 
102
114
  ## 4. Follow the build sequence
103
115
 
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.4.0"
3
+ }
@@ -4,6 +4,25 @@ 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.4.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.3.1...0.4.0) (2026-10-09)
8
+
9
+
10
+ ### ⚠ BREAKING CHANGES
11
+
12
+ * **PS-17:** rag_wright.pack_sdk.DEFAULT_GENERAL is removed (name the model you want instead), and the legacy tag-parse extractor no longer runs a Gemma list pass by default (set RAG_INGEST_LIST_MODEL to keep one).
13
+
14
+ ### Features
15
+
16
+ * **PS-13:** document metadata on IngestSource ([cf2372d](https://github.com/fzaidi-dai/RAG_Wright/commit/cf2372d6ed9ecde761b823d322f7944a221f59d5))
17
+ * **PS-14:** every role-based model call honours the workspace's EngineConfig.models ([a2d086a](https://github.com/fzaidi-dai/RAG_Wright/commit/a2d086a30026146fd78e068c647c12a3a2bd3c69))
18
+ * **PS-16:** a workspace's configuration change takes effect without a restart ([d5f0bcd](https://github.com/fzaidi-dai/RAG_Wright/commit/d5f0bcd5f3dc6a88634caf4a64d6728078a22752))
19
+ * **PS-R4:** unit-labelling eval in evaluate_ingestion ([2d33a31](https://github.com/fzaidi-dai/RAG_Wright/commit/2d33a3178a220b18c5c745d6f30168e1240a2abc))
20
+
21
+
22
+ ### Code Refactoring
23
+
24
+ * **PS-17:** no Gemma default anywhere ([427fac0](https://github.com/fzaidi-dai/RAG_Wright/commit/427fac0f88b1772c2bb3fbbe47f1ec09f4f16d15))
25
+
7
26
  ## [0.3.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.3.0...0.3.1) (2026-10-09)
8
27
 
9
28
 
@@ -55,10 +55,10 @@ 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-09): the public-surface workstream is COMPLETE, pending the 0.3.0 release** (ledger
58
+ > **CURRENT STATE (2026-10-09): the public-surface workstream is COMPLETE and released as `rag-wright` 0.3.1** (ledger
59
59
  > `docs/specs/public-surface/plan.md`, ADR-0128: two public tiers, `rag_wright.api` for a product's seam and
60
- > `rag_wright.pack_sdk` for a pack's code, enforced by import contracts and a domain-vocabulary guard). Next: cut
61
- > 0.3.0; RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md`; PS-R4 is tracked. Before it,
60
+ > `rag_wright.pack_sdk` for a pack's code, enforced by import contracts and a domain-vocabulary guard). Next:
61
+ > RuleWright moves (to 0.3.1+) from `docs/specs/public-surface/rulewright-migration-0.3.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. Before it,
62
62
  > the **ingestion-hooks** workstream (ADR-0124) is
63
63
  > COMPLETE and released as **`rag-wright` 0.2.0** (PyPI + GitHub tag/release `0.2.0`; release process
64
64
  > `docs/releasing.md`): the generic `build_ingestion` with hooks and domain-neutral defaults, the neutral default
@@ -76,7 +76,7 @@ The failure mode to avoid, which has happened before: a command fails with "modu
76
76
  > historical/superseded docs are under `docs/archive/`, and the ADR index is `docs/adr/README.md`.
77
77
  >
78
78
  > **The consolidated doc set** (engine-prep WS2/WS4, audited in ING-5): `docs/concepts.md`, `docs/architecture.md`,
79
- > `docs/installation.md`, `docs/configuration.md`, `docs/quickstart.md` (+ `examples/quickstart.py`),
79
+ > `docs/installation.md`, `docs/configuration.md`, `docs/workspaces.md`, `docs/quickstart.md` (+ `examples/quickstart.py`),
80
80
  > `docs/reference-pack.md`, the generated `docs/api/`, and the domain-adaptation guide
81
81
  > `docs/domain-adaptation/` (ontology authoring, KG construction, entity resolution, authoring capabilities,
82
82
  > classification & decision models) + `_engine-gaps.md`. The product-starter templates are
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.3.1
3
+ Version: 0.4.0
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
@@ -105,7 +105,8 @@ here so the engine is demoable out of the box — your product brings its own do
105
105
  The whole doc set is under [`docs/`](docs/). Pick your path:
106
106
 
107
107
  - **New here?** Read [Concepts](docs/concepts.md) (the mental model), then run the [Quickstart](docs/quickstart.md).
108
- - **Installing / configuring?** [Installation](docs/installation.md) → [Configuration](docs/configuration.md).
108
+ - **Installing / configuring?** [Installation](docs/installation.md) → [Configuration](docs/configuration.md) →
109
+ [Workspaces](docs/workspaces.md) (what applies per workspace, per call and per process).
109
110
  - **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
110
111
  sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
111
112
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
@@ -52,7 +52,8 @@ here so the engine is demoable out of the box — your product brings its own do
52
52
  The whole doc set is under [`docs/`](docs/). Pick your path:
53
53
 
54
54
  - **New here?** Read [Concepts](docs/concepts.md) (the mental model), then run the [Quickstart](docs/quickstart.md).
55
- - **Installing / configuring?** [Installation](docs/installation.md) → [Configuration](docs/configuration.md).
55
+ - **Installing / configuring?** [Installation](docs/installation.md) → [Configuration](docs/configuration.md) →
56
+ [Workspaces](docs/workspaces.md) (what applies per workspace, per call and per process).
56
57
  - **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
57
58
  sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
58
59
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
@@ -113,7 +113,7 @@ flowchart LR
113
113
  dv --> fuse["vector.fuse"]
114
114
  sv --> fuse
115
115
  fuse --> pool["candidate pool (+ property/metadata boost)"]
116
- pool --> rr["rerank (BGE reranker / Gemma listwise)"]
116
+ pool --> rr["rerank (BGE reranker)"]
117
117
  rr --> top["top-k, cited"]
118
118
  ```
119
119
 
@@ -210,7 +210,7 @@ Two registries:
210
210
  | Chunking (single-call / RLM discoverer) | ingestion `chunk` |
211
211
  | Embedding (BGE-M3, dense+sparse) | `index_spans`, query |
212
212
  | Hybrid search (dense+sparse fuse) | `hybrid_search` / `span_hybrid_search` |
213
- | Reranking (BGE reranker / Gemma listwise) | query rerank stage |
213
+ | Reranking (BGE reranker) | query rerank stage |
214
214
  | Graph extraction | clauses (classifier fleet + Jev residual values) + parties (docling-graph) + affiliations (tag-parse, only when a cue word is present) |
215
215
  | Entity resolution | `resolve` (canonical id from the configured registry; EDGAR CIK for the CUAD corpus) |
216
216
  | Ontology-driven schema/vocab | the `.ttl` layer (all stages) |
@@ -124,9 +124,9 @@ When `auto` treats a table as a DATABASE (one unit per row): a header of `min_he
124
124
 
125
125
  What counts as a record IDENTIFIER when linking an embedded file to a row: a token (4+ chars, contains a digit) on at most `max_rows` table rows and in at most `max_files` embedded files.
126
126
 
127
- ### `IngestSource(*, path: Optional[str] = None, data: Optional[bytes] = None, name: Optional[str] = None, doc_id: Optional[str] = None, table_mode: Literal['auto', 'record', 'block'] = 'auto', include_hidden_sheets: bool = True) -> None`
127
+ ### `IngestSource(*, path: Optional[str] = None, data: Optional[bytes] = None, name: Optional[str] = None, doc_id: Optional[str] = None, table_mode: Literal['auto', 'record', 'block'] = 'auto', include_hidden_sheets: bool = True, metadata: Optional[dict[str, Any]] = None) -> None`
128
128
 
129
- One document to ingest: either a file `path`, or in-memory `data` (bytes, e.g. an upload) with its file `name` (the extension picks the format); its `doc_id` (default: derived from the file name), how its tables are grouped (`auto` decides per table; `record` / `block` force one mode), and whether hidden spreadsheet sheets are ingested.
129
+ One document to ingest: either a file `path`, or in-memory `data` (bytes, e.g. an upload) with its file `name` (the extension picks the format); its `doc_id` (default: derived from the file name), how its tables are grouped (`auto` decides per table; `record` / `block` force one mode), whether hidden spreadsheet sheets are ingested, and the product's own `metadata` (PS-13): written onto the document's `Document` node in the same write as the engine's fields, and onto each embedded file's. Keys are identifiers that do not shadow an engine field (`doc_id`, `parent_doc_id`, `filename`, `media_type`, `sha256`); values are strings, numbers, booleans, None or lists of those. Read or filter it with `kg_read(ws, "Document", where={...})`; change it later with `kg_update`.
130
130
 
131
131
  #### `IngestSource.read_bytes(self) -> 'bytes'`
132
132
 
@@ -142,7 +142,7 @@ Advanced: the individual stage functions bound to a workspace (its store, ingest
142
142
 
143
143
  #### `IngestionPipeline.aingest(self, ws: 'Any', sources: 'Sequence[Union[str, Path, IngestSource]]', *, cache_dir: 'Union[str, Path]') -> 'IngestionReport'`
144
144
 
145
- Ingest every source (and its embedded children) into the workspace `ws` (from `open_workspace`). `sources` are file paths or `IngestSource`s (a path, or in-memory bytes with a file name); `cache_dir` holds the content-hash-gated parse and chunk caches (a re-ingest of an unchanged file re-uses them). Documents run concurrently up to `tuning.document_concurrency`; a document that fails is dead-lettered in its `DocumentReport`, never raised. Returns the `IngestionReport`.
145
+ Ingest every source (and its embedded children) into the workspace `ws` (from `open_workspace`). `sources` are file paths or `IngestSource`s (a path, or in-memory bytes with a file name); `cache_dir` holds the content-hash-gated parse and chunk caches (a re-ingest of an unchanged file re-uses them). Documents run concurrently up to `tuning.document_concurrency`; a document that fails is dead-lettered in its `DocumentReport`, never raised. Returns the `IngestionReport`. Every model role resolves through the workspace's `EngineConfig.models` (PS-14).
146
146
 
147
147
  ### `IngestionReport(documents: 'list[DocumentReport]' = <factory>) -> None`
148
148
 
@@ -152,14 +152,18 @@ The result of `IngestionPipeline.aingest`: one `DocumentReport` per document (em
152
152
 
153
153
  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).
154
154
 
155
- ### `IngestionEvaluation(documents: 'list[DocumentEvaluation]' = <factory>, failures: 'list[str]' = <factory>, unlabelled_tables: 'list[str]' = <factory>) -> None`
155
+ ### `IngestionEvaluation(documents: 'list[DocumentEvaluation]' = <factory>, failures: 'list[str]' = <factory>, unlabelled_tables: 'list[str]' = <factory>, labels: 'Optional[LabelEvaluation]' = None) -> None`
156
156
 
157
157
  The result of `evaluate_ingestion`: per-document measures, the `failures` (each check that did not hold, by document) and `unlabelled_tables` (tables no `table_labels` pattern matched). `passed` (property) is True when there are no failures.
158
158
 
159
- ### `DocumentEvaluation(doc: 'str', tiles: 'bool' = True, spans: 'int' = 0, units: 'int' = 0, table_rows: 'int' = 0, table_row_integrity: 'Optional[float]' = None, layout_respect: 'Optional[float]' = None, bare_heading_spans: 'int' = 0, headings_start_units: 'Optional[float]' = None, tables: 'int' = 0, tables_whole: 'Optional[float]' = None, furniture_in_units: 'int' = 0, coverage: 'Optional[float]' = None, cap_ok: 'bool' = True, table_modes: 'list[dict]' = <factory>, embedded_children: 'int' = 0, error: 'Optional[str]' = None) -> None`
159
+ ### `DocumentEvaluation(doc: 'str', tiles: 'bool' = True, spans: 'int' = 0, units: 'int' = 0, table_rows: 'int' = 0, table_row_integrity: 'Optional[float]' = None, layout_respect: 'Optional[float]' = None, bare_heading_spans: 'int' = 0, headings_start_units: 'Optional[float]' = None, tables: 'int' = 0, tables_whole: 'Optional[float]' = None, furniture_in_units: 'int' = 0, coverage: 'Optional[float]' = None, cap_ok: 'bool' = True, table_modes: 'list[dict]' = <factory>, embedded_children: 'int' = 0, label_results: 'list[dict]' = <factory>, error: 'Optional[str]' = None) -> None`
160
160
 
161
161
  One sample document's structural measures. Segmentation: `tiles` (spans tile every chunk), `table_row_integrity` (share of table rows that are their own span), `layout_respect` (share of spans inside one layout item), `bare_heading_spans`. Grouping: `headings_start_units` (share of headings that start a unit), `tables_whole` (share of tables kept whole or split by the record/header rule), `furniture_in_units` (page furniture that leaked into units), `coverage` (share of content spans in some unit), `cap_ok` (every unit within `max_unit_chars`). `table_modes`: the mode chosen per table. `error`: why the document could not be evaluated.
162
162
 
163
+ ### `LabelEvaluation(gold: 'int' = 0, correct: 'int' = 0, accuracy: 'Optional[float]' = None, per_label: 'dict[str, dict]' = <factory>, confusions: 'list[dict]' = <factory>, unmatched: 'list[str]' = <factory>, ambiguous: 'list[str]' = <factory>, conflicting: 'list[str]' = <factory>) -> None`
164
+
165
+ Unit labelling against the gold (`evaluate_ingestion(unit_labels=...)`), scored per UNIT: snippets that land in the same unit with the same label count once. `gold`: units scored; `correct`: those whose label matches; `accuracy`: correct / gold. `per_label`: `{label: {gold, predicted, correct, recall, precision}}` over the gold units (precision is among the gold units predicted with that label; `None` when none were). `confusions`: `{gold, predicted, count}` for every wrong pair, most frequent first. `unmatched` / `ambiguous`: `"<doc>: <snippet>"` for a snippet found in no unit / in several. `conflicting`: `"<doc>: unit <i>: <labels>"` for a unit whose snippets carry different labels (not scored: one label cannot match them all). An empty label means the unit should carry none.
166
+
163
167
  ### `TableRow(*, table_ref: str, sheet: Optional[str] = None, page: Optional[int] = None, row_index: int, columns: list[str], values: list[str]) -> None`
164
168
 
165
169
  ING-7: one data row of a parsed table, read from the parse's cell GRID (exact cell text, whitespace collapsed) -- whole even when the chunker split the table. `columns` is the table's first row as parsed; `row_index` is the 0-based grid row (data rows start at 1). Domain-neutral: what a column MEANS is the domain's decision.
@@ -224,10 +228,16 @@ The semantic boundary-discovery seam: decide chunk boundaries as a partition of
224
228
 
225
229
  Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema: the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose `Span` type still has the pre-ING-8d field names (migrate it with `scripts/migrate_span_fields.py`). Returns an opaque `WorkspaceHandle`. `reset=True` drops + recreates the database (test/clean-slate) and bypasses the cache.
226
230
 
231
+ One handle per store and corpus is cached for the process. An equal `config` returns it; a different one (new models, options, credentials or pack) returns a new handle that replaces it from then on, so a configuration change takes effect without a restart (PS-16). The new handle reuses the store when the store settings and the pack are unchanged, and the query embedder when the embedding profile is unchanged; a call still holding the old handle finishes on the old config.
232
+
227
233
  ### `pack_store(ws: 'WorkspaceHandle', cls: 'Callable[..., _T]', *args: 'Any', **kwargs: 'Any') -> '_T'`
228
234
 
229
235
  Build a pack's store extension (or any object that wraps the workspace store) over the workspace's store: `cls(<store>, *args, **kwargs)`, e.g. `pack_store(ws, MyPackStore)`. The store it receives implements the engine's `Store` protocol (`kg_read` / `kg_write` / `kg_edges` / `kg_count` / `kg_delete` / `kg_update` and the rest); the workspace keeps the store itself private, so this is the one way a product hands it to a pack.
230
236
 
237
+ ### `use_workspace_models(ws: 'Any') -> 'Iterator[None]'`
238
+
239
+ Resolve every model role through `ws`'s `EngineConfig.models` inside the block (PS-14), ahead of the `RAG_MODEL_*` environment. The engine's own entry points that take a workspace (`aingest`, the invokers) do this for you; use it around engine calls that take no workspace, such as `parse_document_bytes` (OCR) or a `default_chunk_discoverer` run, when the workspace overrides those roles. Per call, never shared: concurrent blocks for different workspaces each see their own models.
240
+
231
241
  ### `ainvoke_subgraph(name: 'str', inputs: 'dict', *, resources: 'WorkspaceHandle') -> 'Any'`
232
242
 
233
243
  Invoke a subgraph-kind capability by name over the workspace, inside a trace span. The implementation is resolved lazily from the manifest `impl_ref` (no central adapter dict). Retry/dead-letter comes from the LangGraph scaffold the subgraph is built on; usage is captured by the caller's `measure_usage()` (EP-API-5).
@@ -380,10 +390,12 @@ The engine's generic ingestion pipeline: pass your `extractor` (a `Unit` -> `Uni
380
390
 
381
391
  PS-R5b: the engine's default chunk-boundary rule (structural boundaries first; `chunk_model` refines only an over-cap section, through a domain-neutral prompt) with your domain's `guidance` added to that prompt (e.g. what a coherent unit is in your documents). Pass it as `build_ingestion(chunk_discoverer=...)`.
382
392
 
383
- ### `evaluate_ingestion(sources: 'Sequence[Union[str, Path, IngestSource]]', *, cache_dir: 'Union[str, Path]', tuning: 'Optional[IngestionTuning]' = None, segmenter: 'Optional[Segmenter]' = None, unit_grouper: 'Optional[UnitGrouper]' = None, table_labels: 'Optional[list[dict[str, Any]]]' = None) -> 'IngestionEvaluation'`
393
+ ### `evaluate_ingestion(sources: 'Sequence[Union[str, Path, IngestSource]]', *, cache_dir: 'Union[str, Path]', tuning: 'Optional[IngestionTuning]' = None, segmenter: 'Optional[Segmenter]' = None, unit_grouper: 'Optional[UnitGrouper]' = None, table_labels: 'Optional[list[dict[str, Any]]]' = None, span_tagger: 'Optional[SpanTagger]' = None, unit_representative: 'Optional[UnitRepresentative]' = None, unit_labels: 'Optional[dict[str, list[dict[str, str]]]]' = None) -> 'IngestionEvaluation'`
384
394
 
385
395
  Measure the ingestion hooks' structural fidelity on YOUR sample documents, before trusting them. Runs parse, chunk, segment and group only (no store, no model calls) with the default hooks or the `segmenter` / `unit_grouper` you pass, under `tuning`. Checks: spans tile the text, table rows stay whole, spans respect layout items, no bare-heading spans, headings start units, tables stay whole (or split per row for a record table), no page furniture in units, full coverage, units within the cap. `table_labels` (`[{"pattern": <regex on the header row>, "label": "record" | "block"}]`, first match wins) also checks each table's mode. Returns an `IngestionEvaluation`; tune `IngestionTuning` until `passed`.
386
396
 
397
+ Labelling (PS-R4): pass your `span_tagger` (and any `unit_representative`) with `unit_labels`, the gold `{<document file name>: [{"text": <a snippet that occurs in exactly one unit>, "label": <expected label, "" for none>}]}`, and `labels` (a `LabelEvaluation`) reports each gold unit's label against it: accuracy, per-label results, confusion pairs. The tagger is yours, so it may call models; nothing else does.
398
+
387
399
  ### `table_rows(source_document: 'Any') -> 'list[TableRow]'`
388
400
 
389
401
  Every data row of every table in a parsed document (`parse_document` output), in document order.
@@ -184,9 +184,9 @@ Group into units (checked), attach table rows, extract each unit concurrently (p
184
184
 
185
185
  Persist the records (the domain's writer, else `kg_write`). Returns the number of record nodes.
186
186
 
187
- #### `IngestionStages.write_document_node(self, doc_id: 'str', *, parent_id: 'Optional[str]', filename: 'str', media_type: 'str', sha256: 'str') -> 'None'`
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
 
189
- _(no docstring)_
189
+ The `Document` node: the engine's fields plus the product's `metadata` (PS-13), in one write.
190
190
 
191
191
  #### `IngestionStages.write_child_links(self, parent_id: 'str', child: 'Any', row_spans: 'dict', rep: 'DocumentReport') -> 'None'`
192
192
 
@@ -244,12 +244,6 @@ str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str
244
244
 
245
245
  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.
246
246
 
247
- ### `DEFAULT_GENERAL`
248
-
249
- str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str
250
-
251
- Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.
252
-
253
247
  ### `DEFAULT_RETRY`
254
248
 
255
249
  Configuration for retrying nodes.
@@ -294,7 +288,7 @@ Composes `doc_start = chunk_doc_start + op.start`, `doc_end = chunk_doc_start +
294
288
 
295
289
  ### `model_for(role: 'ModelRole') -> 'str'`
296
290
 
297
- Resolve a role to a model id. Precedence (all config, MS1-2): the ROLE-SPECIFIC override (`RAG_MODEL_<ROLE>`) > the ALL-ROLES override (`RAG_MODEL_ALL`, to point every role at one model for a quick cross-model test) > the documented default. So a run can swap one role, or every role, purely by env.
291
+ Resolve a role to a model id. Precedence: the active workspace's `EngineConfig.models` (PS-14, see `scoped_models`) > the ROLE-SPECIFIC override (`RAG_MODEL_<ROLE>`) > the ALL-ROLES override (`RAG_MODEL_ALL`, to point every role at one model for a quick cross-model test) > the documented default.
298
292
 
299
293
  ### `profile_for(model_id: 'str') -> 'ModelProfile'`
300
294
 
@@ -106,6 +106,16 @@ graph structure. The reference query capabilities are `intra_document_qa`, `type
106
106
  See [`concepts.md`](concepts.md) for both seams in context, and [`configuration.md`](configuration.md) for the
107
107
  knobs.
108
108
 
109
+ ## Known limitations
110
+
111
+ - **One capability catalog per process.** The runtime catalog that `register_capability` fills is shared by every
112
+ workspace in the process, and registering a slug replaces it for all of them, including the later steps of a run
113
+ already in progress. Workspaces in one process can differ in store, corpus and configuration, but not in which
114
+ implementation a slug resolves to. A product whose tenants need different implementations of the same slug runs
115
+ them in separate processes. There is no plan to change this; raise it if a product needs it.
116
+ - **One handle per corpus, and per-process settings.** What applies per workspace, per call and per process, and
117
+ how a configuration change for an open corpus takes effect, is in [`workspaces.md`](workspaces.md).
118
+
109
119
  ## Pointers
110
120
 
111
121
  - [`ARCHITECTURE_OVERVIEW.md`](ARCHITECTURE_OVERVIEW.md) — the detailed as-built pipeline (diagrams, model defaults,
@@ -118,9 +118,11 @@ report = await pipeline.aingest(ws, sources, cache_dir="cache/")
118
118
  row), and the default writer uses `kg_write`. `document_hook(ws, source_document, chunks)` runs once per document
119
119
  after its records are written (for example, a domain's entity graph).
120
120
  - **Inputs and tuning.** `sources` are paths or `IngestSource` objects (a per-document `doc_id`, `table_mode` of
121
- `auto`/`record`/`block`, `include_hidden_sheets`). Every structural threshold is in `IngestionTuning`; set it from
121
+ `auto`/`record`/`block`, `include_hidden_sheets`, and your own `metadata`, stored on the document's `Document`
122
+ node). Every structural threshold is in `IngestionTuning`; set it from
122
123
  `evaluate_ingestion(sources, cache_dir=...)`, which scores tiling, layout respect, table-row integrity and coverage
123
- on your own samples without any model call. `table_rows(source_document)` reads a parsed table's rows from the
124
+ on your own samples without any model call, and (given your span tagger and a small gold set of unit labels) how
125
+ well units are labelled. `table_rows(source_document)` reads a parsed table's rows from the
124
126
  cell grid, whole even when the chunker split the table.
125
127
 
126
128
  The reference contract pipeline (`contract_ingestion_pipeline`) drives these same stages with legal hooks. Hook signatures are in the
@@ -29,7 +29,8 @@ ws = open_workspace(config, corpus="my_corpus", reset=False) # corpus = the ba
29
29
 
30
30
  `open_workspace(config, *, corpus, reset=False)` resolves and caches a workspace and ensures the schema. `corpus`
31
31
  is the backend database name (tenancy is the product's concern); `reset=True` drops and recreates it and bypasses
32
- the cache.
32
+ the cache. Opening a cached corpus with a different config returns a new handle that replaces the cached one, so a
33
+ configuration change takes effect without a restart ([`workspaces.md`](workspaces.md)).
33
34
 
34
35
  ### `StoreConfig`
35
36
 
@@ -79,6 +80,19 @@ cfg = EngineConfig(store=..., options=EngineOptions(packs={"contracts": Contract
79
80
  Models are chosen by **role** (`ModelRole`) and resolved to a concrete model by a **profile** keyed by model id —
80
81
  never a hardcoded provider flag. Override a role per workspace via `EngineConfig.models`, or globally via env.
81
82
 
83
+ **Per workspace.** A role resolves to the active workspace's `EngineConfig.models` entry first, then
84
+ `RAG_MODEL_<ROLE>`, then `RAG_MODEL_ALL`, then the default. Every engine call that takes a workspace (ingestion
85
+ through `aingest`, the `invoke_*` / `ainvoke_*` calls and the MCP tools built on them, `agenerate_answer`,
86
+ `ajudge_spans`) runs under that workspace's models, and concurrent calls for different workspaces each see their
87
+ own. Wrap a call that takes no workspace in `with use_workspace_models(ws):`, for example `parse_document_bytes`
88
+ (its OCR escalation uses `VISION_OCR`) or a `default_chunk_discoverer` run. Not per workspace, set once for the
89
+ process: the serving backend and its endpoints (`RAG_SERVING`, `VLLM_BASE_URL`, `OPENROUTER_*`), the decision
90
+ model's profile (`RAG_DECISION_MODEL`; a call can name one in the `jev_decision` input `model`), the call timeouts,
91
+ the trained classifier weights (`RAG_MODELS_DIR`), and the reference pack's graph-extraction model
92
+ (`RAG_GRAPH_EXTRACT_MODEL`) and standalone MCP servers, which resolve their models from the environment when they
93
+ start. [`workspaces.md`](workspaces.md) has the full picture: what applies per workspace, per call and per process,
94
+ and how to manage workspaces.
95
+
82
96
  - **Serving backend** — `RAG_SERVING` selects `openrouter` (default) or `vllm` (self-hosted). For vLLM set
83
97
  `VLLM_BASE_URL` and `VLLM_API_KEY`; for OpenRouter set `OPENROUTER_API_KEY` (optionally `OPENROUTER_PROVIDER`, a
84
98
  comma-separated provider list, with `OPENROUTER_ALLOW_FALLBACKS` to allow routing beyond it; the contracts pack's
@@ -112,7 +126,7 @@ Prefer config; use env for secrets and for non-API callers. The common ones the
112
126
  | `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_GENERAL`, `RAG_MODEL_VISION_OCR`) / `RAG_MODEL_ALL` / `RAG_GRAPH_EXTRACT_MODEL` / `RAG_DECISION_MODEL` | model overrides (one role / all roles / graph extraction / decision-model profile) |
113
127
  | `RAG_SEMANTIC_JUDGE` / `RAG_RESIDUAL_EXTRACTOR` | set to `llm` to move the reference pipeline's extraction judge / residual property values off the decision model |
114
128
  | `CLASSIFY_CONCURRENCY` / `CLAUSE_CONCURRENCY` / `RAG_INGEST_AFFILIATIONS` / `RAG_FUNCTION_CLASSIFIER` | contracts-pack ingest knobs (mirror `ContractIngestOptions`) |
115
- | `RAG_INGEST_LIST_MODEL` / `RAG_INGEST_CLAUSE_SAMPLES` / `RAG_INGEST_CLAUSE_EXTRACTOR` | read only by the contracts pack's legacy tag-parse clause extractor, which the default pipeline does not use (it is classifier-first) |
129
+ | `RAG_INGEST_LIST_MODEL` / `RAG_INGEST_CLAUSE_SAMPLES` / `RAG_INGEST_CLAUSE_EXTRACTOR` | read only by the contracts pack's legacy tag-parse clause extractor, which the default pipeline does not use (it is classifier-first); its second list model runs only when `RAG_INGEST_LIST_MODEL` names one (no default model) |
116
130
  | `RAG_STRUCTURED_TIMEOUT_S` / `RAG_JEV_TIMEOUT_S` / `RAG_JUDGE_TIMEOUT_S` / `RAG_RELEVANCE_TIMEOUT_S` | call timeouts (raise for reasoning-ON bulk work) |
117
131
  | `RAG_SPACY_MODEL` | the spaCy model name for the optional NER extra |
118
132
  | `RAG_MODELS_DIR` | the models root every trained classifier loads its weights from (default: the engine checkout's `data/models` when it exists, else `./data/models`); fill it with `scripts/fetch_reference_models.py` for the reference pack |
@@ -17,7 +17,8 @@ ADR-0117/0118 engine API + capability runtime). Read [Concepts](../concepts.md)
17
17
  2. **Configure the engine.** Construct an `EngineConfig` (store, model roles, embedding profile, and the options
18
18
  catalog: the generic ingest `tuning`, plus your pack's own options under `EngineOptions.packs`) and
19
19
  `open_workspace(config, corpus=…) -> WorkspaceHandle`. `corpus` is the backend DB name; tenancy is
20
- product-side. → [Configuration](../configuration.md).
20
+ product-side: one corpus and one config per tenant, with the settings that stay per process listed in
21
+ [Workspaces](../workspaces.md). → [Configuration](../configuration.md).
21
22
 
22
23
  3. **Author the domain `.ttl` pack.** The domain KNOWLEDGE — closed value sets, the KG schema, SHACL constraints,
23
24
  mappings — lives in the ontology, declaratively, never in Python (ADR-0066). It co-evolves with step 4 (it
@@ -93,6 +93,12 @@ def register() -> None:
93
93
  `for m in engine_capabilities(): register_capability(m)` (or from your pack's `register()`, as above);
94
94
  otherwise `ainvoke_model("jev_decision", ...)` raises `KeyError` (unknown capability).
95
95
 
96
+ **One catalog per process (a known limitation).** The catalog is shared by every workspace in the process:
97
+ registering a slug replaces it for all of them, including the later steps of a run already in progress, so register
98
+ once at startup. To give tenants different implementations of one slug (for example a decision model for one and a
99
+ trained classifier for another), run them in separate processes, or register one slug per implementation and choose
100
+ the slug per tenant in your own code.
101
+
96
102
  **Discovery.** Once registered, a product agent finds your capability two ways: `capability_index()` — the flat
97
103
  `{slug: {kind, description}}` listing (what exists) — or **`discover(task, resources=ws)`** — embedding-ranked
98
104
  selection over the live catalog for a task (returns the top matches by BGE-M3 similarity to each capability's
@@ -89,11 +89,43 @@ the run goes on. Every node and edge type your extractor returns must be declare
89
89
  6,000), the fragment floor, the database-table rule (`RecordTableRule`), the identifier rule for linking embedded
90
90
  files to rows (`IdentifierRule`), and the two concurrency limits. Set it on the builder or on
91
91
  `EngineConfig.options.ingest.tuning`.
92
+ - **`IngestSource.metadata`**: your own fields for a document (an owner, a case number, tags, a received date),
93
+ written onto its `Document` node in the same write as the engine's fields, and onto each of its embedded files'.
94
+ Keys are identifiers that do not shadow an engine field (`doc_id`, `parent_doc_id`, `filename`, `media_type`,
95
+ `sha256`); values are strings, numbers, booleans, `None` or lists of those. Read and filter it with
96
+ `kg_read(ws, "Document", where={"owner": "team-a"})`, then pass the matching document ids to a query's document
97
+ scope (spans and records do not carry it). A re-ingest without metadata leaves it in place, and one with metadata
98
+ updates the keys it gives; change it at any time with `kg_update(ws, "Document", set={...}, where={"doc_id": ...})`.
99
+
100
+ ```python
101
+ from rag_wright.api import IngestSource, kg_read
102
+
103
+ src = IngestSource(path="intake/report-118.pdf", metadata={"owner": "team-a", "tags": ["q3", "audit"]})
104
+ report = await pipeline.aingest(ws, [src], cache_dir="cache/")
105
+ team_a = [r["doc_id"] for r in kg_read(ws, "Document", where={"owner": "team-a"}, fields=["doc_id"])]
106
+ ```
92
107
  - **`IngestSource.table_mode`**: `auto` (default) decides per table whether it is a database (one unit per row) or a
93
108
  form (one unit); `record` and `block` force one mode for that source.
94
109
  - **`evaluate_ingestion(sources, cache_dir=..., tuning=..., table_labels=...)`** runs the structural stages (parse,
95
110
  deterministic chunk, segment, group; no model, no store) on your own samples and reports `passed` / `failures`. Use
96
- it to set `IngestionTuning` before a full run.
111
+ it to set `IngestionTuning` before a full run. It also measures unit **labelling** without a knowledge graph: pass
112
+ your `span_tagger` (and any `unit_representative`) with `unit_labels`, a small gold set of units, each found by a
113
+ snippet that occurs in it alone, with its expected label (`""` for none). `labels` reports accuracy, per-label
114
+ results and the confusion pairs, per unit; a snippet found in no unit or in several, and a unit given different
115
+ labels by its snippets, are reported as failures. Compare a representative rule against the first-member baseline on the same gold:
116
+
117
+ ```python
118
+ from rag_wright.api import evaluate_ingestion
119
+
120
+ gold = {"spec_sheet.pdf": [
121
+ {"text": "knitted on a 30-inch machine", "label": "construction"},
122
+ {"text": "Customer: Northwind Apparel", "label": ""},
123
+ ]}
124
+ baseline = evaluate_ingestion(samples, cache_dir="cache/", span_tagger=my_tagger, unit_labels=gold)
125
+ voted = evaluate_ingestion(samples, cache_dir="cache/", span_tagger=my_tagger, unit_representative=vote,
126
+ unit_labels=gold)
127
+ print(baseline.labels.accuracy, voted.labels.accuracy, voted.labels.confusions[:5])
128
+ ```
97
129
  - **`table_rows(source_document)`** returns every parsed table's data rows (`TableRow`: `columns`, `values`,
98
130
  `cell(name)`, table ref, sheet or page, row index), read from the parse's cell grid, so a table split across chunks
99
131
  comes back whole. What a column means is your domain's decision.
@@ -76,7 +76,7 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
76
76
  | PS-R1 | Found in PS-8a's live check: every Qwen3.8-27b call hangs to its deadline while OpenRouter's `deepinfra/bf16` endpoint is down (0% uptime), because ADR-0111 hard-pins it with fallbacks off. Remove the provider routing entirely (your decision: unpinned; classifiers + Jev carry the critical decisions, FP8 validated on Modal); ADR-0125 supersedes ADR-0111 | profile tests; live seam + party extraction succeed during the outage | done: no provider routing on the three OpenRouter Qwen profiles; ADR-0125 supersedes 0111; live during the outage: seam 1.6 s, party extraction 8.0 s (pinned: hung to the deadline) |
77
77
  | PS-R2 | A failed party (graph) extraction no longer dead-letters the document: the clause records are kept and the failure is reported | hermetic degrade test; live ingest keeps its clauses | done: `extract_graph` best-effort after its retries; `graph_failures` -> a `graph` kind in `build_partial_entry` (optional trailing arg) in both drivers; live: forced graph failure kept 6 clauses + 12 spans, no dead-letter |
78
78
  | PS-R3 | Which member span represents a unit is a domain decision: engine hook `unit_representative` (a `UnitRepresentative`: the unit's member spans -> its anchor + leading tag) on `build_ingestion` / `IngestionStages`; the reference pack's rule chosen by measurement (heading-first vs operative span vs votes) on all 510 CUAD contracts against CUAD gold; docs tell products what the hook does and why | hook tests; CUAD rule comparison (local, CUAD outputs never committed); live ingest | done: `UnitRepresentative` hook; reference rule `provision_vote` (D) chosen on 510 CUAD contracts (56.6% vs 46.8% heading-first); probabilities via `with_probabilities` + `TaggedSpan.scores`; ADR-0126 |
79
- | PS-R4 | A new domain can measure its unit labelling without a KG: `evaluate_ingestion` gains `span_tagger=`, `unit_representative=` and `unit_labels=` (gold: per document, each unit by a text snippet with its expected label) and reports label accuracy, per-label results and confusion pairs; the creating-evals skill gains a unit-labelling entry; building-an-ingestion-capability says to build this gold before choosing a `unit_representative`; the CUAD run is the documented reference example (numbers only) | hermetic tests; a worked example on sample documents | todo |
79
+ | PS-R4 | A new domain can measure its unit labelling without a KG: `evaluate_ingestion` gains `span_tagger=`, `unit_representative=` and `unit_labels=` (gold: per document, each unit by a text snippet with its expected label) and reports label accuracy, per-label results and confusion pairs; the creating-evals skill gains a unit-labelling entry; building-an-ingestion-capability says to build this gold before choosing a `unit_representative`; the CUAD run is the documented reference example (numbers only) | hermetic tests; a worked example on sample documents | done: `evaluate_ingestion(span_tagger=, unit_representative=, unit_labels=)` -> `IngestionEvaluation.labels` (`LabelEvaluation`: accuracy, per-label recall/precision, confusion pairs, scored per unit; unmatched / ambiguous snippets and conflicting unit gold are failures); creating-evals + ingestion skill + kg-construction + concepts; live CUAD check (50 random contracts, reference hooks, local SetFit): vote 65.3% vs first-member 44.2% on 95 scored units, directionally ADR-0126 |
80
80
  | PS-R5a | Domain vocabulary out of the generic engine, public surface first (blocks 0.3.0): the relevance judge (`Condition.clause_type` -> `category`, its SKILL.md + prompt) and the generation method become domain-neutral, with the contract wording in a reference-pack guidance overlay; neutral discovery text in the engine capability manifests; neutral docstring examples; a vocabulary guard test (zero tolerance in engine skills, manifests and public API docstrings; a per-file ratchet elsewhere) complementing the import-linter | guard test; relevance + generation tests; live judge + answer | done: neutral relevance judge (`Condition.category`) + generation method with pack `guidance` overlays; neutral manifests + docstrings; vocabulary guard (zero tolerance + ratchet at 156 lines / 24 files); live judge + answer |
81
81
  | PS-R5b | RLM chunking prompts domain-neutral (domain hints supplied by the pack) and a `build_ingestion(chunk_discoverer=)` hook + `default_chunk_discoverer(guidance=)` so a product can set them; the entity-canonicalisation word lists (party words, party-definition fragments) moved into the pack `.ttl` (ADR-0066) | guard ratchet lowered; chunking + canonicalisation tests; live ingest | done: neutral chunking prompts with `guidance=` (pack passes contract guidance); `build_ingestion(chunk_discoverer=)` + `default_chunk_discoverer(guidance=)` + `BoundaryDiscoverer` exported; `EntityRules` with the contract roles on `cbr:entityRules` in the `.ttl`; ratchet 156 -> 133 lines; live: same 2 entities + 1 edge, over-cap chunking split per guidance |
82
82
  | PS-R5c | Retire OKF (user decision; was 'move into the pack'): `rag_wright/okf/`, the `okf_navigate` capability + skill, the `okf_compile`/`okf_navigate` pack slugs, `ModelRole.OKF_ENRICHMENT`, the OKF tests and the experiment's eval scripts; ADR-0127 | full suite; catalog + discover live; ratchet lowered; no dangling imports | done: OKF code, capability, skill, slugs, `OKF_ENRICHMENT` role, tests and experiment evals removed; ADR-0127; ratchet 133 -> 66 lines; catalog 35, no OKF |
@@ -85,3 +85,9 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
85
85
  | PS-9 | Docs: API reference regenerated; the engine-usage + authoring skills, the domain-adaptation guide, the product-starter templates and the RuleWright guide updated (the interim rules in its Q&A replaced by the new surface); G15-G21 closed in `_engine-gaps.md`; ADR; product-starter templates (CLAUDE.md + playbook + README) and the `using-the-rag-wright-engine` skill: define an `engine-docs` Graphify lane (`{{ENGINE_DOCS_LANE_PATH}}`: the engine repo's `docs/` + skills at the tag matching the installed engine) next to the `engine` lane, and a standing rule to rebuild both engine lanes on every engine version change (Dependabot merge, `uv sync`, editable-mode edits) before grounding the next call; skill lessons from PS-R3 (ADR-0126) in `setfit` and `creating-evals`: evaluate a classifier the way its consumers use it (top-1 accuracy when anything acts on the primary label, alongside top-k for soft tags; on pipeline-produced inputs incl. headings and no-label spans, not only curated snippets) and list the consumers of the primary label (and check them end to end) before declaring a classifier swap has no downstream impact; fix the stale `clause_function_classification` manifest description (says LegalBERT; production is the SetFit ensemble) | doc-reference test; full suite | done: RuleWright 0.3.0 guide; G21 closed, G1/G13 mostly closed (SDK +GraphWriter/build_graph_extraction, 85); skills (two tiers, engine-docs lane + rebuild rule, classifier-eval lessons, bytes sources); templates; ER/authoring/config guides; manifest text; ADR-0128; tasks.md + CLAUDE.md banner |
86
86
  | PS-10 | Ship the engine-authored Claude Code skills in the wheel, version-matched to the engine: the eight skills (`using-the-rag-wright-engine`, `authoring-a-capability`, `building-an-ingestion-capability`, `creating-evals`, `classifier-opportunity-analysis`, `setfit`, `laya`, `qwen-vllm-modal` with its Modal deploy script) live once under `src/rag_wright/.agents/skills/` (the convention docling and fastapi use) and the engine repo's `.claude/skills/` links to them; each shipped skill marks its engine-repo paths as such and gives a product its own verify step; the product-starter templates, `using-the-rag-wright-engine` and the RuleWright 0.3.0 guide say to link them from the installed package | wheel-contents test (builds the wheel); one-source + engine-repo-path tests; doc-reference test; full suite | done: 8 skills + the Qwen deploy script under `src/rag_wright/.agents/skills/`, `.claude/skills/` and `scripts/modal_qwen3_vllm_server.py` link to them; engine-repo paths marked, a product verify step in authoring-a-capability, local paths removed; one link command (by import, PyPI or editable) in the skill, installation, templates and RuleWright guide section 5; `.agents/` out of the vocabulary ratchet; wheel built offline and linked from a scratch product. The 0.3.0 release wheel (built from the sdist) shipped no skills: hatchling's sdist left out `.agents/`; fixed by an sdist `force-include`, and the test now builds sdist then wheel as `publish.yml` does (0.3.1) |
87
87
  | PS-11 | Docs: how a product swaps the model behind a hook decision (e.g. a trained classifier vs Jev for span tagging): `classification-and-decision-models.md` gains a section with a `span_tagger` that invokes a capability of the product's own by name, a Jev-backed implementation of it, the swap by re-registering the slug, filling `TaggedSpan.scores` from the probabilities so a voting `unit_representative` keeps working, measuring before choosing, and the large-label-set caveat; one cross-reference each in `kg-construction.md` and `building-an-ingestion-capability` | the section's example executed by a hermetic test (Jev stubbed); doc-reference test; full suite | done: section 5 of the classification & decision models guide (hook calls the product's own slug; classifier and Jev arms; swap by re-registering; scores for a voting representative; measure/cost/repeatability/label-set caveats); cross-references in kg-construction and the ingestion skill; example executed by `tests/api/test_decision_swap_doc_example.py`; live Jev call confirmed probabilities for every option |
88
+ | PS-12 | Docs: the capability catalog is process-wide (one `MANIFEST_SPECS` for the process; `register_capability` replaces a slug for every workspace), so tenants that need different implementations of one slug run in separate processes; stated as a known limitation in `architecture.md`, the authoring-capabilities guide and the `using-the-rag-wright-engine` skill (not planned to change; revisit if a product needs it) | doc-reference test; full suite | done: "Known limitations" in `architecture.md`; the authoring-capabilities guide and the engine-usage skill say to register once at startup and give two ways out (separate processes, or one slug per implementation chosen per tenant); re-registering changes every later lookup, not a call already resolved |
89
+ | PS-13 | Document metadata: `IngestSource(metadata={...})` written onto the `Document` node in the same write as the engine's fields (embedded children too); `kg_read` no longer returns the store's internal `@props` key; the `kg_update` route for metadata that changes after ingest documented; metadata survives re-ingest | hermetic tests; live store test (write, filter, re-ingest) | done: `IngestSource.metadata` (identifier keys, no engine-field keys, scalar/list values) written in the `Document` write, inherited by embedded files; `kg_read` drops `@props` only (record keys kept); kg-construction, concepts and both skills; hermetic + live store test (write, filter, re-ingest keeps / updates, `kg_update`) |
90
+ | PS-14 | Every model call honours the workspace's `EngineConfig.models`: chunking, OCR, vision, RLM and the other role-based calls resolve through the workspace instead of the environment/defaults alone (today only `agenerate_answer` and `ajudge_spans` do); whatever cannot be per-workspace (e.g. process-wide classifier weights) documented | hermetic tests (two workspaces, two configs, each call sees its own model); live check | done: `model_for(role)` resolves the active workspace's `EngineConfig.models` first (a context variable set by `aingest`, the invokers and the MCP tools; public `use_workspace_models(ws)` for calls without a workspace); engine-started threads (`map_concurrent` timeout path, the pack's ingest job, the LLM clause classifier's sub-batch pool) carry the caller's context, which also restores their usage metering; what stays process-wide in `configuration.md`; live: two workspaces, Qwen vs Gemma, each call metered on its own model |
91
+ | PS-15 | Docs, after PS-13 and PS-14: one place that says what is per workspace, per config object and per process (corpus and store, `EngineConfig` and its models, the capability catalog, environment variables, classifier weights, caches) and how a product manages workspaces (one corpus per workspace, its own `EngineConfig`, its own `cache_dir`, document metadata); linked from `architecture.md`, `configuration.md`, the domain-adaptation guide, the `using-the-rag-wright-engine` skill and the product-starter templates; a RuleWright section in its 0.3 guide (or the next release's) on managing its workspaces this way; in the user guides, PS-13's two behaviours: a re-ingest only adds or updates the metadata keys it is given (to remove a value, `kg_update` it to `None`), and `IngestSource.metadata` is a new public field shipped in the next minor release (products pin accordingly) | doc-reference test; full suite | done: `docs/workspaces.md` (what applies per workspace / per call / per process, managing workspaces, the two metadata behaviours, config changes need a restart); RuleWright guide `rulewright-migration-0.4.0.md` (customer workspaces, per-customer models vs `answer_model_id`, cache per customer, metadata); linked from README, architecture, configuration, the domain-adaptation guide, the engine-usage skill, both product-starter templates, the 0.3 guide and CLAUDE.md |
92
+ | PS-16 | A configuration change takes effect without a restart: `open_workspace` returns the cached handle only when the config is equal; a different config gets a new handle (the store and the embedder reused when their settings are unchanged), and calls already holding the old handle finish on the old config; docs (workspaces, configuration, the engine-usage skill, the RuleWright 0.4 guide) updated | hermetic tests; live check (re-open with new models, same store) | done: an equal config returns the cached handle; a different one a new handle that replaces it (store reused for unchanged store settings + pack, query embedder for an unchanged profile; in-flight calls keep the old config); workspaces/configuration/skill/RuleWright 0.4 guide updated; live on ArcadeDB: same connection, new models, data visible |
93
+ | PS-17 | No Gemma by default anywhere (your decision: Gemma only through config or a product): `DEFAULT_GENERAL` (Gemma) removed from `models.profiles` and `rag_wright.pack_sdk`; the reference pack's legacy tag-parse extractor runs its second list model only when `RAG_INGEST_LIST_MODEL` or `list_model=` names one; text that calls Gemma the model in use corrected (benchmark notes kept); the Gemma profiles stay registered so config can select Gemma correctly | guard test (no role default, constant or default-on path is Gemma); full suite | done: `DEFAULT_GENERAL` removed (profiles + `pack_sdk`, 84 symbols); the legacy extractor's list model via `list_model_for` (only when named); ~20 statements now say the GENERAL role (benchmark notes and serving gotchas kept, labelled); overview's stale Gemma listwise rerank removed; Gemma profiles stay registered; guard test; `CLAUDE.md` / `SPEC.md` wording left as is (your call) |
@@ -1,6 +1,9 @@
1
- # RuleWright: moving to rag-wright 0.3.0
1
+ # RuleWright: moving to rag-wright 0.3 (target 0.3.1)
2
2
 
3
- What 0.3.0 changes for RuleWright, written from a read-only scan of the RuleWright repo (2026-10-09). It follows the
3
+ Install rag-wright 0.3.1 or later. Every change below landed in 0.3.0, but the 0.3.0 wheel on PyPI left out the
4
+ engine skills that section 5 links (0.3.1 fixes the packaging and changes nothing else).
5
+
6
+ What 0.3 changes for RuleWright, written from a read-only scan of the RuleWright repo (2026-10-09). It follows the
4
7
  0.2.0 migration (`docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md`); do that one first. Nothing here is
5
8
  edited from the engine repo.
6
9
 
@@ -86,3 +89,5 @@ for d in "$SKILLS"/*/; do ln -sfn "${d%/}" ".claude/skills/$(basename "$d")"; do
86
89
 
87
90
  Run RuleWright's suite against the engine checkout (editable path) and its live engine-seam test; re-ingest one
88
91
  contract and compare its clauses (expect the section 2 changes, not errors).
92
+
93
+ Next: `docs/specs/public-surface/rulewright-migration-0.4.0.md` (customer workspaces, per-customer models, document metadata).