rag-wright 0.7.0__tar.gz → 0.8.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 (1012) hide show
  1. {rag_wright-0.7.0/src/rag_wright/.agents → rag_wright-0.8.0/.claude}/skills/building-an-ingestion-capability/SKILL.md +5 -0
  2. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/creating-evals/SKILL.md +112 -36
  3. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/SKILL.md +24 -12
  4. {rag_wright-0.7.0/src/rag_wright/.agents → rag_wright-0.8.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +20 -2
  5. rag_wright-0.8.0/.release-please-manifest.json +3 -0
  6. {rag_wright-0.7.0 → rag_wright-0.8.0}/CHANGELOG.md +24 -0
  7. {rag_wright-0.7.0 → rag_wright-0.8.0}/CLAUDE.md +12 -2
  8. {rag_wright-0.7.0 → rag_wright-0.8.0}/PKG-INFO +4 -1
  9. {rag_wright-0.7.0 → rag_wright-0.8.0}/README.md +2 -0
  10. rag_wright-0.8.0/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +39 -0
  11. rag_wright-0.8.0/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +29 -0
  12. rag_wright-0.8.0/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +38 -0
  13. rag_wright-0.8.0/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +34 -0
  14. rag_wright-0.8.0/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +39 -0
  15. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/README.md +8 -3
  16. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/api/README.md +112 -6
  17. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/api/pack_sdk.md +3 -1
  18. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/configuration.md +7 -3
  19. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/README.md +3 -2
  20. rag_wright-0.8.0/docs/domain-adaptation/evals-from-expert-files.md +46 -0
  21. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/kg-construction.md +34 -1
  22. rag_wright-0.8.0/docs/evals.md +51 -0
  23. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/installation.md +2 -1
  24. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/playbook.md +6 -6
  25. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/releasing.md +1 -1
  26. rag_wright-0.8.0/docs/specs/evals/plan.md +118 -0
  27. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/plan.md +8 -0
  28. rag_wright-0.8.0/docs/specs/public-surface/rulewright-migration-0.8.0.md +62 -0
  29. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/CLAUDE.md.template +3 -2
  30. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/README.md +1 -0
  31. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/playbook.md.template +5 -2
  32. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/workspaces.md +5 -0
  33. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/condensed_pipeline.py +1 -1
  34. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/contract_parity_live.py +2 -2
  35. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/cuad_highlight.py +1 -1
  36. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/full_pipeline_rerank.py +1 -1
  37. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_ceiling.py +1 -1
  38. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_property_rerank.py +1 -1
  39. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_rerank.py +1 -1
  40. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/ground_discriminator_rerank.py +1 -1
  41. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/kg_primary.py +1 -1
  42. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/kg_property_rerank.py +1 -1
  43. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/listwise_rerank.py +1 -1
  44. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/relational_eval.py +14 -2
  45. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/residual_decision_gold.py +1 -1
  46. {rag_wright-0.7.0 → rag_wright-0.8.0}/pyproject.toml +4 -1
  47. {rag_wright-0.7.0 → rag_wright-0.8.0}/release-please-config.json +4 -1
  48. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/measure_generation_robustness.py +24 -13
  49. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/refresh_framework_graph.sh +1 -1
  50. {rag_wright-0.7.0/.claude → rag_wright-0.8.0/src/rag_wright/.agents}/skills/building-an-ingestion-capability/SKILL.md +5 -0
  51. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +112 -36
  52. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +24 -12
  53. {rag_wright-0.7.0/.claude → rag_wright-0.8.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +20 -2
  54. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/__init__.py +13 -4
  55. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/documents.py +14 -0
  56. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/workspace.py +7 -4
  57. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/answer_generator.py +25 -10
  58. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/document_parse.py +17 -7
  59. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/parsing.py +18 -15
  60. rag_wright-0.8.0/src/rag_wright/capabilities/sheet_tables.py +174 -0
  61. rag_wright-0.8.0/src/rag_wright/contracts/evals.py +140 -0
  62. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/document_parser.py +7 -1
  63. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/embedded.py +24 -30
  64. rag_wright-0.8.0/src/rag_wright/evals/__init__.py +11 -0
  65. rag_wright-0.8.0/src/rag_wright/evals/gold.py +219 -0
  66. rag_wright-0.8.0/src/rag_wright/evals/langfuse_backend.py +109 -0
  67. rag_wright-0.8.0/src/rag_wright/evals/runner.py +139 -0
  68. rag_wright-0.8.0/src/rag_wright/evals/scorers.py +477 -0
  69. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/__init__.py +2 -2
  70. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/evaluate.py +104 -30
  71. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/seam.py +52 -0
  72. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/tracing.py +19 -0
  73. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +1 -1
  74. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +1 -1
  75. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +1 -1
  76. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +1 -1
  77. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/generation/SKILL.md +7 -6
  78. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/arcadedb.py +19 -6
  79. rag_wright-0.8.0/src/rag_wright/util/pdfium.py +58 -0
  80. {rag_wright-0.7.0 → rag_wright-0.8.0}/tasks.md +11 -4
  81. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_open_workspace_reconfig.py +1 -1
  82. rag_wright-0.8.0/tests/api/test_pdf_page_count.py +42 -0
  83. rag_wright-0.8.0/tests/arch/test_lock_version.py +30 -0
  84. rag_wright-0.8.0/tests/arch/test_pdfium_door.py +80 -0
  85. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_shipped_skills.py +21 -0
  86. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_answer_generator.py +39 -0
  87. rag_wright-0.8.0/tests/evals/test_gold_contracts.py +87 -0
  88. rag_wright-0.8.0/tests/evals/test_gold_import.py +146 -0
  89. rag_wright-0.8.0/tests/evals/test_langfuse_backend.py +165 -0
  90. rag_wright-0.8.0/tests/evals/test_runner.py +124 -0
  91. rag_wright-0.8.0/tests/evals/test_scorer_parity.py +311 -0
  92. rag_wright-0.8.0/tests/evals/test_scorers_a.py +116 -0
  93. rag_wright-0.8.0/tests/evals/test_scorers_b.py +82 -0
  94. rag_wright-0.8.0/tests/evals/test_scorers_c.py +101 -0
  95. rag_wright-0.8.0/tests/evals/test_scorers_d.py +96 -0
  96. rag_wright-0.8.0/tests/ingestion/test_aevaluate.py +105 -0
  97. rag_wright-0.8.0/tests/ingestion/test_sheet_continuations.py +143 -0
  98. rag_wright-0.8.0/tests/models/test_seam_event_loops.py +84 -0
  99. rag_wright-0.8.0/tests/scripts/test_generation_robustness_errors.py +17 -0
  100. rag_wright-0.8.0/tests/skills/test_creating_evals_skill_example.py +57 -0
  101. rag_wright-0.8.0/tests/store/test_store_create_flag.py +121 -0
  102. rag_wright-0.8.0/tests/util/__init__.py +0 -0
  103. {rag_wright-0.7.0 → rag_wright-0.8.0}/uv.lock +3 -1
  104. rag_wright-0.7.0/.release-please-manifest.json +0 -3
  105. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/settings.json +0 -0
  106. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  107. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  108. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/laya/SKILL.md +0 -0
  109. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  110. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  111. {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/setfit/SKILL.md +0 -0
  112. {rag_wright-0.7.0 → rag_wright-0.8.0}/.env.example +0 -0
  113. {rag_wright-0.7.0 → rag_wright-0.8.0}/.github/workflows/publish.yml +0 -0
  114. {rag_wright-0.7.0 → rag_wright-0.8.0}/.github/workflows/release-please.yml +0 -0
  115. {rag_wright-0.7.0 → rag_wright-0.8.0}/.gitignore +0 -0
  116. {rag_wright-0.7.0 → rag_wright-0.8.0}/LICENSE +0 -0
  117. {rag_wright-0.7.0 → rag_wright-0.8.0}/SPEC.md +0 -0
  118. {rag_wright-0.7.0 → rag_wright-0.8.0}/conftest.py +0 -0
  119. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  120. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/ArcadeDB_Local.md +0 -0
  121. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/OBSERVABILITY.md +0 -0
  122. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  123. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  124. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  125. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  126. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0005-relational-golden-set.md +0 -0
  127. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0006-model-profile.md +0 -0
  128. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  129. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  130. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  131. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  132. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  133. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  134. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  135. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  136. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  137. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  138. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  139. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  140. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  141. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  142. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  143. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  144. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  145. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  146. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  147. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  148. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  149. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  150. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  151. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  152. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  153. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  154. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  155. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  156. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  157. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  158. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  159. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  160. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  161. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  162. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  163. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  164. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  165. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  166. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  167. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  168. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  169. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  170. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  171. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  172. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  173. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  174. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  175. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  176. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  177. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  178. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  179. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  180. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  181. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  182. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  183. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  184. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  185. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  186. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  187. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  188. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  189. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  190. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  191. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  192. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  193. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  194. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  195. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  196. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  197. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  198. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  199. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  200. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  201. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  202. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  203. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  204. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  205. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  206. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  207. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  208. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  209. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  210. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  211. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  212. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  213. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  214. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  215. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  216. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0095-span-page-provenance.md +0 -0
  217. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  218. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  219. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  220. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  221. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  222. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  223. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  224. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  225. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  226. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  227. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  228. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  229. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  230. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  231. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  232. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  233. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  234. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  235. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  236. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  237. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  238. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  239. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  240. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  241. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  242. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  243. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  244. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  245. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  246. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  247. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  248. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  249. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  250. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  251. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  252. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  253. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  254. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  255. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  256. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/architecture.md +0 -0
  257. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/README.md +0 -0
  258. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  259. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  260. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  261. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  262. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  263. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  264. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  265. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  266. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  267. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  268. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  269. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  270. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  271. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  272. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  273. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  274. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  275. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  276. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  277. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  278. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  279. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  280. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  281. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  282. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  283. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  284. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  285. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  286. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  287. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  288. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  289. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  290. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  291. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  292. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  293. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  294. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  295. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  296. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  297. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  298. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  299. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  300. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  301. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  302. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  303. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  304. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  305. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  306. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  307. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  308. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  309. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  310. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  311. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  312. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  313. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  314. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  315. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  316. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  317. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  318. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  319. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/misc/.gitkeep +0 -0
  320. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  321. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/async-migration.md +0 -0
  322. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/demo_plan.md +0 -0
  323. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  324. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  325. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  326. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  327. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  328. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  329. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/concepts.md +0 -0
  330. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/contract_pipeline_explainer.md +0 -0
  331. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/corpus_ingest_recipe.md +0 -0
  332. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
  333. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  334. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  335. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  336. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  337. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/classifier_model_ab.md +0 -0
  338. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_demo.md +0 -0
  339. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_gate_cc7.md +0 -0
  340. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  341. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  342. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/dg_model_ab.md +0 -0
  343. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/function_gate_recall.md +0 -0
  344. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  345. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  346. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/ocr_benchmark.md +0 -0
  347. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/prod1_readiness.md +0 -0
  348. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/prod2_readiness.md +0 -0
  349. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/query_side_model_ab.md +0 -0
  350. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  351. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_provider_routing.md +0 -0
  352. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  353. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/capability_profiles.md +0 -0
  354. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/contracts_product_roadmap.md +0 -0
  355. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/engine-api-migration-handoff.md +0 -0
  356. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/engine_async_api.md +0 -0
  357. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/new-domain-build-sequence.md +0 -0
  358. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/seam-adaptation-guide.md +0 -0
  359. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  360. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  361. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  362. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/ontology-induction.md +0 -0
  363. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/quickstart.md +0 -0
  364. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/reference-pack.md +0 -0
  365. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-platform/SPEC.md +0 -0
  366. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-platform/TASKS.md +0 -0
  367. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-prep/plan.md +0 -0
  368. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  369. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  370. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  371. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  372. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  373. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  374. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  375. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  376. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  377. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  378. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/dependabot.yml +0 -0
  379. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  380. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  381. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  382. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  383. {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  384. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/__init__.py +0 -0
  385. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/acord.py +0 -0
  386. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/acord_retrieval.py +0 -0
  387. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/boundary_residue_gold.py +0 -0
  388. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/build_golden.py +0 -0
  389. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  390. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  391. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  392. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  393. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/contractnli_judge.py +0 -0
  394. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/embedded_eval.py +0 -0
  395. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/gate1_chunker_ab.py +0 -0
  396. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/gate2_hybrid_rerank.py +0 -0
  397. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/golden/relational/set.json +0 -0
  398. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/golden.py +0 -0
  399. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/harness.py +0 -0
  400. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/ingestion_live_smoke.py +0 -0
  401. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/multihop.py +0 -0
  402. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/nl_to_type.py +0 -0
  403. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/segmenter_eval.py +0 -0
  404. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/semantic_judge_gold.py +0 -0
  405. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_acord.py +0 -0
  406. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_acord_retrieval.py +0 -0
  407. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_harness.py +0 -0
  408. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_multihop_set.py +0 -0
  409. {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/unit_grouper_eval.py +0 -0
  410. {rag_wright-0.7.0 → rag_wright-0.8.0}/examples/model_server.py +0 -0
  411. {rag_wright-0.7.0 → rag_wright-0.8.0}/examples/quickstart.py +0 -0
  412. {rag_wright-0.7.0 → rag_wright-0.8.0}/plan.md +0 -0
  413. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ab_model_overlap.py +0 -0
  414. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acord_unify.py +0 -0
  415. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_acord.py +0 -0
  416. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_cuad.py +0 -0
  417. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_ecfr.py +0 -0
  418. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_edgar.py +0 -0
  419. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_ftc_255.py +0 -0
  420. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_prod1_corpus.py +0 -0
  421. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/audit_reclass_flips.py +0 -0
  422. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/author_leg_a_silver_key.py +0 -0
  423. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_affiliations.py +0 -0
  424. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_clause_span_id.py +0 -0
  425. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  426. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backup_kg_to_gcs.sh +0 -0
  427. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/bootstrap_template_capture.py +0 -0
  428. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/bootstrap_typed_edges.py +0 -0
  429. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_api_docs.py +0 -0
  430. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_api_docs.sh +0 -0
  431. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_cuad_clause_cache.py +0 -0
  432. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_function_routing_map.py +0 -0
  433. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_assemble_v2.py +0 -0
  434. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_assemble_v3.py +0 -0
  435. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  436. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_hard_positives.py +0 -0
  437. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_training.py +0 -0
  438. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_hybrid.py +0 -0
  439. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_hybrid2.py +0 -0
  440. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_actor.py +0 -0
  441. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_claimtypes.py +0 -0
  442. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_operative.py +0 -0
  443. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_label_spans.py +0 -0
  444. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_laya_prep.py +0 -0
  445. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_laya_train.py +0 -0
  446. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_prep_operative.py +0 -0
  447. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_relabel_rubric.py +0 -0
  448. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_relabel_rubric2.py +0 -0
  449. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_train_operative.py +0 -0
  450. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compare_extraction_models.py +0 -0
  451. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  452. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_engine_smoke.py +0 -0
  453. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_policy_demo.py +0 -0
  454. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/curate_taxonomy_gaps.py +0 -0
  455. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/dg_model_ab.py +0 -0
  456. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  457. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  458. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  459. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_legs.py +0 -0
  460. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_pool.py +0 -0
  461. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_relstructure.py +0 -0
  462. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_retrieval.py +0 -0
  463. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_all.py +0 -0
  464. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_ce.py +0 -0
  465. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_listwise_b.py +0 -0
  466. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/export_ce_dataset.py +0 -0
  467. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/extract_features.py +0 -0
  468. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/listwise_variants.py +0 -0
  469. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/relational_features.py +0 -0
  470. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/train_ce.py +0 -0
  471. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/train_modal.py +0 -0
  472. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/enrich_edgar_candidates.py +0 -0
  473. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_chunking_ab.py +0 -0
  474. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  475. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_compliance_gold.py +0 -0
  476. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/extract_arcadedb_docs.py +0 -0
  477. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/fetch_reference_models.py +0 -0
  478. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/generate_contract_python.py +0 -0
  479. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/git_post_commit_graphify.sh +0 -0
  480. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/granite_chunker_assess.py +0 -0
  481. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/graph_status.sh +0 -0
  482. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_acord.py +0 -0
  483. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  484. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  485. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_prod2.py +0 -0
  486. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_cuad.py +0 -0
  487. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_cuad_full.py +0 -0
  488. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_ftc_compliance.py +0 -0
  489. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_prod1.py +0 -0
  490. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_prod1_async.py +0 -0
  491. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_smoke.py +0 -0
  492. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/install_git_hooks.sh +0 -0
  493. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/label_new_functions.py +0 -0
  494. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/legb_function_gate_recall.py +0 -0
  495. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/make_compliance_fixtures.py +0 -0
  496. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/make_compliance_gold.py +0 -0
  497. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  498. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  499. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  500. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/measure_silver.py +0 -0
  501. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/merge_docs_into_framework.py +0 -0
  502. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  503. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  504. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  505. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_span_fields.py +0 -0
  506. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mine_scarce_functions.py +0 -0
  507. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_arcadedb.py +0 -0
  508. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_backfill.py +0 -0
  509. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_exception_linking.py +0 -0
  510. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_gemma4_vllm.py +0 -0
  511. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  512. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_server.py +0 -0
  513. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_throughput.py +0 -0
  514. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_vllm_server.py +0 -0
  515. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_query_app.py +0 -0
  516. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  517. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  518. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  519. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_stack_a100.py +0 -0
  520. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ocr_benchmark.py +0 -0
  521. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ocr_preprocess.py +0 -0
  522. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ontology_dimension_check.py +0 -0
  523. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/phase_a_leg_validate.py +0 -0
  524. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_clause_kg.py +0 -0
  525. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_entity_graph.py +0 -0
  526. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_entity_graph_extracted.py +0 -0
  527. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_property_store.py +0 -0
  528. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/prep_relational_verification.py +0 -0
  529. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/publish_manifests.py +0 -0
  530. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/reclassify_kg.py +0 -0
  531. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/revert_reclass_flips.py +0 -0
  532. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/run_acord_retrieval.py +0 -0
  533. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/run_clause_exception_linking.py +0 -0
  534. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/semantic_judge_live_validate.py +0 -0
  535. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/semantic_judge_probe.py +0 -0
  536. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/snapshot_leg_a_eval.py +0 -0
  537. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/stack_correctness_validate.py +0 -0
  538. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/table_retrieval_smoke.py +0 -0
  539. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_function_classifier.py +0 -0
  540. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_legalbert_function.py +0 -0
  541. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_legalbert_modal.py +0 -0
  542. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/typed_rerank_validate.py +0 -0
  543. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/verify_wheel_install.sh +0 -0
  544. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_extraction_ab.py +0 -0
  545. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_kg_query_validate.py +0 -0
  546. {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_raw_diagnostic.py +0 -0
  547. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  548. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  549. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  550. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  551. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  552. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  553. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/__init__.py +0 -0
  554. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/answers.py +0 -0
  555. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/config.py +0 -0
  556. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/discover.py +0 -0
  557. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/ids.py +0 -0
  558. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/invoke.py +0 -0
  559. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/kg.py +0 -0
  560. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/mcp.py +0 -0
  561. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/tracing.py +0 -0
  562. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/usage.py +0 -0
  563. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/__init__.py +0 -0
  564. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/ard.py +0 -0
  565. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  566. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  567. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  568. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  569. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/embedding.py +0 -0
  570. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  571. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  572. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/fusion.py +0 -0
  573. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  574. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  575. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  576. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/invoke.py +0 -0
  577. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  578. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/manifests.py +0 -0
  579. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/registry.py +0 -0
  580. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  581. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/reranking.py +0 -0
  582. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  583. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  584. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  585. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  586. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  587. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  588. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  589. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/__init__.py +0 -0
  590. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/chunk.py +0 -0
  591. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/extraction.py +0 -0
  592. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/graph.py +0 -0
  593. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/identifiers.py +0 -0
  594. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/ingestion.py +0 -0
  595. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/provenance.py +0 -0
  596. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/span.py +0 -0
  597. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/__init__.py +0 -0
  598. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  599. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/http.py +0 -0
  600. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/builder.py +0 -0
  601. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/group.py +0 -0
  602. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/layout.py +0 -0
  603. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/segment.py +0 -0
  604. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/tables.py +0 -0
  605. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/__init__.py +0 -0
  606. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/model_servers.py +0 -0
  607. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/profiles.py +0 -0
  608. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/tag_structured.py +0 -0
  609. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/usage.py +0 -0
  610. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/weights.py +0 -0
  611. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/__init__.py +0 -0
  612. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  613. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/registry.py +0 -0
  614. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
  615. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/__init__.py +0 -0
  616. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  617. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  618. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  619. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  620. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  621. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  622. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  623. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  624. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  625. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  626. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  627. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  628. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  629. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  630. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  631. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  632. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  633. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  634. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  635. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  636. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  637. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  638. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  639. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  640. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  641. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  642. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  643. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  644. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  645. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  646. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  647. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  648. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  649. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  650. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  651. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  652. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  653. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  654. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  655. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  656. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  657. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  658. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  659. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  660. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  661. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  662. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  663. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  664. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  665. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  666. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  667. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  668. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  669. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  670. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  671. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  672. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  673. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  674. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/options.py +0 -0
  675. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  676. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  677. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  678. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  679. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  680. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  681. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  682. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  683. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  684. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  685. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  686. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  687. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  688. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  689. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  690. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  691. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  692. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  693. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  694. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  695. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  696. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  697. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  698. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  699. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  700. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  701. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  702. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  703. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  704. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  705. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  706. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  707. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  708. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  709. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  710. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  711. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  712. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  713. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  714. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  715. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  716. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  717. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  718. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  719. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  720. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  721. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  722. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  723. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  724. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/reference_seam.py +0 -0
  725. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/py.typed +0 -0
  726. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/__init__.py +0 -0
  727. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  728. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  729. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  730. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  731. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  732. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  733. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  734. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/spans/__init__.py +0 -0
  735. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/spans/page_map.py +0 -0
  736. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/__init__.py +0 -0
  737. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/chunk_text.py +0 -0
  738. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/seam.py +0 -0
  739. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  740. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  741. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/observability.py +0 -0
  742. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  743. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  744. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/__init__.py +0 -0
  745. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/concurrent.py +0 -0
  746. {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/spacy_model.py +0 -0
  747. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/__init__.py +0 -0
  748. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/__init__.py +0 -0
  749. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_answers_exports.py +0 -0
  750. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_bytes_ingest.py +0 -0
  751. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_capability_reexports.py +0 -0
  752. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  753. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_discover.py +0 -0
  754. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_documents.py +0 -0
  755. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_e2e.py +0 -0
  756. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_invoke.py +0 -0
  757. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_kg.py +0 -0
  758. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_mcp.py +0 -0
  759. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_metering_tracing_exports.py +0 -0
  760. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_model_role_export.py +0 -0
  761. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_options.py +0 -0
  762. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_pack_sdk.py +0 -0
  763. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_pack_store.py +0 -0
  764. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_usage.py +0 -0
  765. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_workspace.py +0 -0
  766. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_workspace_models.py +0 -0
  767. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  768. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_api_docs_current.py +0 -0
  769. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_doc_references.py +0 -0
  770. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  771. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_import_contracts.py +0 -0
  772. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  773. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/async_helpers.py +0 -0
  774. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/__init__.py +0 -0
  775. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  776. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  777. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  778. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_authoring_contract.py +0 -0
  779. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunk_read.py +0 -0
  780. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunk_write.py +0 -0
  781. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  782. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_claim_extraction.py +0 -0
  783. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  784. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  785. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_compliance_store.py +0 -0
  786. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  787. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  788. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  789. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  790. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_adapter.py +0 -0
  791. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_async.py +0 -0
  792. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_extraction.py +0 -0
  793. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  794. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_private.py +0 -0
  795. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_disambiguation.py +0 -0
  796. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_document_scope.py +0 -0
  797. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_embedding.py +0 -0
  798. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  799. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_entity_resolution.py +0 -0
  800. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  801. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_fusion.py +0 -0
  802. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_extraction.py +0 -0
  803. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_query.py +0 -0
  804. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_storage.py +0 -0
  805. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_highlight_serve.py +0 -0
  806. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_hybrid_search.py +0 -0
  807. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_jev_decision.py +0 -0
  808. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_manifest_validation.py +0 -0
  809. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_manifests.py +0 -0
  810. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_parsing.py +0 -0
  811. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_parties_extraction.py +0 -0
  812. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  813. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  814. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_query_understanding.py +0 -0
  815. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_registry.py +0 -0
  816. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_remote_encoders.py +0 -0
  817. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_repair_partition.py +0 -0
  818. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  819. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_reranking.py +0 -0
  820. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_retrieval_core.py +0 -0
  821. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  822. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  823. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_method.py +0 -0
  824. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  825. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_runtime_registry.py +0 -0
  826. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_scan_quality.py +0 -0
  827. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  828. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  829. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  830. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  831. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  832. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  833. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/compliance_fakes.py +0 -0
  834. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/conftest.py +0 -0
  835. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/__init__.py +0 -0
  836. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  837. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_chunk_record.py +0 -0
  838. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_compliance.py +0 -0
  839. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  840. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_extraction.py +0 -0
  841. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_function.py +0 -0
  842. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_function_routing.py +0 -0
  843. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_identifiers.py +0 -0
  844. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  845. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_jurisdiction.py +0 -0
  846. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_ontology.py +0 -0
  847. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_property.py +0 -0
  848. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_provenance.py +0 -0
  849. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_value_match.py +0 -0
  850. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/__init__.py +0 -0
  851. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  852. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_canonicalize.py +0 -0
  853. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_cuad.py +0 -0
  854. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  855. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_document_parser.py +0 -0
  856. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_edgar.py +0 -0
  857. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_embedded.py +0 -0
  858. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  859. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_http.py +0 -0
  860. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_parse_wire2.py +0 -0
  861. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_selection.py +0 -0
  862. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_contractnli_judge.py +0 -0
  863. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  864. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_kg_property_rerank.py +0 -0
  865. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  866. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_relational_eval.py +0 -0
  867. {rag_wright-0.7.0/tests/foundation → rag_wright-0.8.0/tests/evals}/__init__.py +0 -0
  868. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  869. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  870. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  871. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  872. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  873. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  874. {rag_wright-0.7.0/tests/ingestion → rag_wright-0.8.0/tests/foundation}/__init__.py +0 -0
  875. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  876. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/foundation/test_model_seam_structured.py +0 -0
  877. {rag_wright-0.7.0/tests/mcp → rag_wright-0.8.0/tests/ingestion}/__init__.py +0 -0
  878. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_builder.py +0 -0
  879. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  880. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  881. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_document_metadata.py +0 -0
  882. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_evaluate.py +0 -0
  883. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  884. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  885. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  886. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_table_rows.py +0 -0
  887. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_tuning.py +0 -0
  888. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_unit_grouper.py +0 -0
  889. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_unit_representative.py +0 -0
  890. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/incidents_domain.py +0 -0
  891. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/incidents_pack.ttl +0 -0
  892. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/test_incidents_journey.py +0 -0
  893. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/test_pack_schema.py +0 -0
  894. {rag_wright-0.7.0/tests/models → rag_wright-0.8.0/tests/mcp}/__init__.py +0 -0
  895. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_compliance_server.py +0 -0
  896. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  897. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  898. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_relational_qa_server.py +0 -0
  899. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  900. {rag_wright-0.7.0/tests/ontology → rag_wright-0.8.0/tests/models}/__init__.py +0 -0
  901. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_async_infra.py +0 -0
  902. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  903. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_model_servers.py +0 -0
  904. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_models_dir.py +0 -0
  905. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_no_gemma_default.py +0 -0
  906. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_profile_routing.py +0 -0
  907. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_profile_seam.py +0 -0
  908. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_async.py +0 -0
  909. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
  910. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_retry.py +0 -0
  911. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_stream.py +0 -0
  912. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_serving_seam.py +0 -0
  913. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_serving_wiring.py +0 -0
  914. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tag_structured.py +0 -0
  915. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tag_structured_async.py +0 -0
  916. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tracing.py +0 -0
  917. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_usage.py +0 -0
  918. {rag_wright-0.7.0/tests/skills → rag_wright-0.8.0/tests/ontology}/__init__.py +0 -0
  919. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_clause_template.py +0 -0
  920. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  921. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_derivation.py +0 -0
  922. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  923. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  924. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  925. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  926. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  927. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/reference/test_compliance_reference.py +0 -0
  928. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/reference/test_contract_seam.py +0 -0
  929. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  930. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  931. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  932. {rag_wright-0.7.0/tests/store → rag_wright-0.8.0/tests/skills}/__init__.py +0 -0
  933. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  934. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_boundary.py +0 -0
  935. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  936. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  937. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_function_classifier.py +0 -0
  938. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  939. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  940. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  941. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_dim_classifier.py +0 -0
  942. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_dim_fleet_live.py +0 -0
  943. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_function_classifier.py +0 -0
  944. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_hybrid_classifier.py +0 -0
  945. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  946. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_legalbert_classifier.py +0 -0
  947. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_model_capabilities.py +0 -0
  948. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_new_function_labels.py +0 -0
  949. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_page_map.py +0 -0
  950. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_property_extractor.py +0 -0
  951. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_property_grounding.py +0 -0
  952. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_reclassify.py +0 -0
  953. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_residual_decision.py +0 -0
  954. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_scarce_function_labels.py +0 -0
  955. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_segment.py +0 -0
  956. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_segmentation_vocab.py +0 -0
  957. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_semantic_judge.py +0 -0
  958. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  959. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_setfit_probabilities.py +0 -0
  960. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_span_offsets.py +0 -0
  961. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_stage_labels_0005.py +0 -0
  962. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_symbolic_validation.py +0 -0
  963. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  964. {rag_wright-0.7.0/tests/subgraphs → rag_wright-0.8.0/tests/store}/__init__.py +0 -0
  965. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_affiliation_backfill.py +0 -0
  966. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  967. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_contract.py +0 -0
  968. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_property.py +0 -0
  969. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  970. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_schema.py +0 -0
  971. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_span.py +0 -0
  972. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_chunk_text.py +0 -0
  973. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_concurrent_writes.py +0 -0
  974. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_contract_kg_store_live.py +0 -0
  975. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_document_metadata_live.py +0 -0
  976. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_document_scope.py +0 -0
  977. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_engine_domain_neutral.py +0 -0
  978. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_entities_by_name.py +0 -0
  979. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_edges.py +0 -0
  980. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_mutations.py +0 -0
  981. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_read.py +0 -0
  982. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_write.py +0 -0
  983. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_neutral_schema.py +0 -0
  984. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_write_graph_idempotent.py +0 -0
  985. {rag_wright-0.7.0/tests/util → rag_wright-0.8.0/tests/subgraphs}/__init__.py +0 -0
  986. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  987. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  988. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_clause_results.py +0 -0
  989. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_compliance_check.py +0 -0
  990. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  991. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  992. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  993. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  994. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  995. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  996. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  997. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  998. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_observability.py +0 -0
  999. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1000. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1001. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1002. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1003. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_scaffold.py +0 -0
  1004. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1005. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1006. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1007. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_backfill_clause_span_id.py +0 -0
  1008. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_dg_model_ab.py +0 -0
  1009. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_populate_clause_kg.py +0 -0
  1010. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_populate_entity_graph.py +0 -0
  1011. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/util/test_concurrent.py +0 -0
  1012. {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/util/test_spacy_model.py +0 -0
@@ -136,6 +136,11 @@ network-bound work inside it; the engine runs up to `IngestionTuning.extract_con
136
136
 
137
137
  - **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
138
138
  `DocumentReport.skipped_hidden_sheets`).
139
+ - **Blank rows inside a table**: the parse cuts a sheet's table at every blank row; the engine glues a piece back
140
+ onto the table above when its first row is data (its number or date columns agree, or it is formatted like the
141
+ data rather than the header), so no record is read as a header. A text-only table with no formatting cannot be
142
+ decided from the file: it stays apart and `evaluate_ingestion` lists it in `warnings` (format the header row, or
143
+ remove the blank rows).
139
144
  - **Exact cell values**: `table_rows(parse_document(...))` returns every data row as a `TableRow` (`columns`,
140
145
  `values`, `cell(name)`), read from the parse's cell grid, whole even when chunking split the table. A per-row unit
141
146
  carries its row in `Unit.table_row`, so the extractor reads cells, not re-parsed text.
@@ -6,8 +6,10 @@ description: >-
6
6
  starting a new domain (right after capabilities are defined), when adding or changing a capability, or when A/B-ing
7
7
  alternatives (e.g. a trained classifier vs a System-1 decision model). Covers gold-set design + reliability,
8
8
  per-capability-KIND metrics (extraction / classification / retrieval / graph / generation / judgment), the
9
- gate-vs-diagnostic split, building the gold cheaply, an isolated executable harness, and optional Langfuse
10
- Datasets/Experiments/Scores automation. An eval is the executable acceptance criterion; training data IS an eval.
9
+ gate-vs-diagnostic split, building the gold cheaply, and running it with the engine's eval toolkit
10
+ (`load_gold_set` from an expert's own files, one `score_*` per kind, `arun_eval` with repeats and errors kept apart,
11
+ an `EvalReport` a backend can return, optional Langfuse datasets and runs). An eval is the executable acceptance
12
+ criterion; training data IS an eval.
11
13
  ---
12
14
 
13
15
  # Creating evals (eval-first / TDD)
@@ -19,6 +21,13 @@ can A/B alternatives and catch regressions forever. Corollary observed repeatedl
19
21
  data you build for a classifier/decision model IS an eval** (a labeled gold set + a metric) — so building the eval
20
22
  first also gives you the data design for free.
21
23
 
24
+ **The toolkit (on `rag_wright.api`).** `load_gold_set` turns an expert's CSV / XLSX / JSONL into a `GoldSet`;
25
+ one scorer per capability kind (section 2) turns predictions into a `ScorerResult` (the gate, its thresholds,
26
+ diagnostics that are never gated); `arun_eval` runs your capability over the gold set (concurrently, `[eval] i/N`
27
+ progress, repeats, a failed call kept as an error) and returns an `EvalReport` -- JSON-ready, every item's outputs
28
+ kept, so `rescore_eval` can score it again later without calling anything. Use it rather than hand-writing a
29
+ harness; section 6 is a complete example.
30
+
22
31
  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. The `eval/` and `scripts/` files named as patterns are the engine's own evals: read them as
23
32
  worked examples; your evals live in your repo.
24
33
 
@@ -50,12 +59,30 @@ worked examples; your evals live in your repo.
50
59
  - **Separate a tuning set from a held-out set.** Label the held-out set BEFORE any prompt runs on it, tune only on
51
60
  the tuning set, and report both numbers (ADR-0122 boundary residue prompt: 94.5% held-out vs 96.2% tuning). A
52
61
  number measured only on the set you tuned on is not a result.
62
+ - **Gold from your experts' own files.** Domain experts label in spreadsheets: `load_gold_set(path_or_upload,
63
+ GoldMapping(id=..., input=..., expected=..., group=...), name=..., version=...)` reads them as written -- the header
64
+ found under a title, blank rows skipped, values kept exactly, each item's place recorded -- and refuses anything
65
+ that would make the gold wrong (a missing column, a row without its id, a duplicate id) with where it is. Map
66
+ `group` to the source document so splits stay leakage-safe. A gold set is `local_only` by default: client data
67
+ never leaves the machine.
53
68
  - **Gold stays local when the corpus is restrictively licensed** (CUAD/ACORD-derived gold lives under the
54
69
  gitignored `data/eval/`); commit the builder and the scorer, never the data.
55
70
 
56
71
  ## 2. Pick the metric by capability KIND, and split GATE vs DIAGNOSTIC
57
72
  Always set ONE pass/fail **gate** (from the acceptance criterion) and report **diagnostics** alongside (never gate
58
- on a diagnostic).
73
+ on a diagnostic). Each kind has its scorer on `rag_wright.api`, checked against the engine evals named below:
74
+
75
+ | kind | scorer | gate |
76
+ |---|---|---|
77
+ | classification / typed decision | `score_classification` | the weakest class's recall@k (+ top-1 accuracy via `top1_floor`) |
78
+ | retrieval | `score_retrieval` | mean recall@k at a relevance grade; nDCG reported |
79
+ | extraction | `score_extraction` | recall and precision, apart |
80
+ | judgment / verdict | `score_judgment` | precision and recall of the actionable verdict |
81
+ | generation / QA | `score_generation` | citation recall, correct abstention, groundedness |
82
+ | graph / relational | `score_relational` | recall over the answer set |
83
+ | ingestion structure / unit labelling | `score_ingestion` | `evaluate_ingestion`'s checks (+ label accuracy) |
84
+ | candidate-then-choose | `score_candidate_choice` | candidate coverage, value-level recall and precision |
85
+
59
86
  - **Extraction** (section → records, clauses, requirements): recall / precision / F1 of extracted items vs gold,
60
87
  reported SEPARATELY (under- vs over-extraction are different failures). Watch over-extraction on non-operative
61
88
  input (definitions) and under-extraction on long input.
@@ -84,7 +111,7 @@ on a diagnostic).
84
111
  scores mean what they say), not one accuracy number. Pattern: `eval/semantic_judge_gold.py` (ING-9: decision
85
112
  model 95.3% vs LLM 90.1% on 192 blind hand-labelled cases).
86
113
  - **Candidate-then-choose pipelines** (a generator proposes, a model picks): measure the generator's **coverage**
87
- separately, because it caps recall (ING-9b residual values: candidate coverage 95%; value-level recall 0.83 /
114
+ separately, because it caps recall (ING-9b residual values: candidate coverage 0.93, 188/203 recomputed from the saved outputs; value-level recall 0.83 /
88
115
  precision 0.88 vs the LLM's 0.60 / 0.79. Pattern: `eval/residual_decision_gold.py`). **Count is not accuracy**:
89
116
  emitting more values is not a win without precision.
90
117
  - **Ingestion structure**: `evaluate_ingestion` (in `rag_wright.api`) is the packaged structural eval of the
@@ -111,42 +138,87 @@ on a diagnostic).
111
138
  - **Generate hard cases** (near-boundary positives/negatives) to stress the exact confusions — TRAIN-ONLY; the
112
139
  gold test stays real. (Full data playbook: the `setfit` skill Phase 1/4 + `classifier-opportunity-analysis`.)
113
140
 
114
- ## 4. Make it an executable, isolated harness
115
- - **Isolate the capability under test**: inject it (a seam / `extract_override` / an injected `retrieve`) so the
116
- eval measures ONE capability, not the whole pipeline. Invoke production code THROUGH the capability layer
117
- (`ainvoke_subgraph`/`ainvoke_model`), never a hand-built copy. Score the **shipped request** (the exact
118
- prompt/question builder production uses, e.g. `judge_request`), not a copy of it re-typed in the eval.
119
- - **Repeatability for non-deterministic models.** Run each case several times on identical input; report how many
120
- answers flip and how far the scores sit from the threshold. Flips cluster near the threshold and usually mean
121
- the QUESTION is ambiguous: fix the question, do not vote it away (Jev flipped 5/181 answers at scores 0.47-0.56;
122
- temperature/seed did not help, majority voting barely helped, rewriting the ambiguous question did. The ADR-0122
123
- boundary residue prompt went from 94-96% with flips to 460/461, zero flips across 3 calls). Pattern:
124
- `eval/boundary_residue_gold.py`.
141
+ ## 4. Run it: `arun_eval`
142
+ `arun_eval(gold, task, scorers, *, repeats, concurrency, progress)` is the harness. It runs `task` (your coroutine,
143
+ or a plain function, which runs off the event loop) on every item, `repeats` times, `concurrency` at a time, streams
144
+ `[eval] i/N` lines to `progress`, keeps a call that raises as an ERROR in that item's slot (never dropped, never an
145
+ answer), scores each repeat, and passes a scorer only if it passes on every repeat (its gate is the worst repeat;
146
+ `per_repeat_gate` lists each). `run_eval` is the synchronous form; inside a web backend, await `arun_eval` as a
147
+ background job. What is still yours:
148
+ - **Isolate the capability under test**: the task calls ONE capability, injected (a seam / `extract_override` / an
149
+ injected `retrieve`), so the eval measures it, not the whole pipeline. Invoke production code THROUGH the
150
+ capability layer (`ainvoke_subgraph`/`ainvoke_model`), never a hand-built copy. Score the **shipped request** (the
151
+ exact prompt/question builder production uses, e.g. `judge_request`), not a copy of it re-typed in the eval.
152
+ - **Repeatability for non-deterministic models.** Use `repeats` and read `report.flips`; flips cluster near the
153
+ threshold and usually mean the QUESTION is ambiguous: fix the question, do not vote it away (Jev flipped 5/181
154
+ answers at scores 0.47-0.56; temperature/seed did not help, majority voting barely helped, rewriting the ambiguous
155
+ question did. The ADR-0122 boundary residue prompt went from 94-96% with flips to 460/461, zero flips across 3
156
+ calls). Pattern: `eval/boundary_residue_gold.py`.
125
157
  - **Cache keys include the prompt and the method.** Any decision or extraction cache must key on the prompt text
126
158
  and the method (decision model vs LLM, and which model), so an eval never reuses outputs a different prompt or
127
159
  method produced (ADR-0122 ING-4d / ADR-0040 ING-9b: the residue decision cache and the clause cache).
128
- - **Score from a RESULT ARTIFACT (JSON), not stdout scraping** (scraping truncates and silently drops rows).
129
- - **Parallelize** model/LLM calls (async + semaphore) — same cost, far less wall-clock; order-preserving so it
130
- stays deterministic.
131
- - **Env-selected** so the SAME harness runs local (dev) or on Modal (full corpus + GPU).
160
+ - **Keep the report.** `report.model_dump_json()` holds every item's outputs; save it next to the gold version.
161
+ `rescore_eval(report, gold, scorers)` re-scores it with new thresholds, a new scorer or a corrected gold, free. An
162
+ eval kept only as aggregate numbers can never be checked again.
132
163
  - **Pre-flight paid bulk** (>~50 paid calls): print the exact count + cost and wait (`warn-before-bulk` rule).
133
- - Stream `X/N` progress + actively monitor any run over ~30s (never launch-and-forget).
134
164
  - **Hermetic tests never touch the network**: `tests/conftest.py` fails a test that resolves a non-local host unless
135
- it carries a live marker (`model`, `store`, ...). Live evals run as `uv run python -u eval/<name>.py` (outside
136
- pytest) or carry a live marker.
137
-
138
- ## 5. Langfuse — optional eval automation (we already use it for tracing)
139
- Langfuse has a first-class eval stack we are NOT yet using (we use it only for spans/usage today): a **Dataset**
140
- (items = input + optional expected output) → a **Task** (your capability) run over the dataset as an **Experiment
141
- Run** → **Evaluators** (deterministic checks or LLM-as-judge) producing **Scores** (numeric/categorical/boolean),
142
- all linked to traces. Reach for it when you want **tracked, re-runnable, dashboarded** evals + regression tracking
143
- across capability versions; a local JSON harness is enough for a quick one-off gate. Keep the gold BUILDER + a
144
- committed snapshot in the repo (reproducibility); push the items to the Langfuse dataset so runs and scores land
145
- next to the traces you already collect. Ground the exact Dataset/Experiment API before wiring
146
- (https://langfuse.com/docs/evaluation/concepts, https://langfuse.com/docs/datasets/overview); confirm the installed
147
- SDK version's surface, not prose.
148
-
149
- ## 6. The TDD loop
165
+ it carries a live marker (`model`, `store`, ...). Live evals run as scripts (outside pytest) or carry a live
166
+ marker.
167
+
168
+ ## 5. Langfuse -- optional: datasets, runs and scores next to the traces
169
+ `arun_eval(..., langfuse=True)` (or `RAG_EVAL_BACKEND=langfuse`; the keys alone send nothing) runs the same eval on
170
+ Langfuse: the gold set becomes a dataset (items upserted; items no longer in the gold set archived; the version is
171
+ the server's latest timestamp, recorded as `report.dataset_version`), each repeat a dataset run (`report.run_urls`),
172
+ and each scorer's gates and pass/fail are pushed as run scores. The report is the same, scored locally from the same
173
+ outputs. With engine tracing on (`RAG_TRACE_LEVEL`), every model call the task makes nests under its item's trace,
174
+ on both backends. What was verified against Langfuse 4.15.1 (self-hosted), and what to know:
175
+ - **`local_only` is refused before anything is sent.** Only a self-hosted Langfuse should ever receive client data;
176
+ set `local_only=False` only for data that may leave the machine.
177
+ - **Scoring runs in your process**, not in Langfuse: its code evaluators are a 2-second, standard-library sandbox
178
+ with no network, so they cannot run your scorers.
179
+ - **The SDK's own `run_experiment` drops an item whose task raises, and blocks a running event loop**; `arun_eval`
180
+ handles both (an error is an error in its slot; the run is off the loop). Call `arun_eval`, not the SDK directly.
181
+ - **Reading observations back**: the v2 list endpoint is Cloud-only until Langfuse v4 ships in the open-source
182
+ release, and the v1 endpoint times out on a trace-only query: bound every read by time.
183
+ - Langfuse's managed LLM-as-a-judge and decision-model evaluators, and its UI prompt experiments, test a prompt in
184
+ Langfuse, not your pipeline: out of scope for this toolkit (a product may still use them).
185
+
186
+ ## 6. A complete example
187
+ An expert's labelled workbook, your capability run through the capability layer, two repeats, the report kept and
188
+ scored again later. `my_judge` stands for your capability's call (e.g. through `ainvoke_model`); the rest runs as
189
+ written.
190
+
191
+ ```python
192
+ import asyncio
193
+ import functools
194
+ from pathlib import Path
195
+
196
+ from rag_wright.api import (EvalReport, GoldMapping, arun_eval, load_gold_set, rescore_eval,
197
+ score_judgment)
198
+
199
+ GOLD_FILE = "gold/nli_expert_labels.xlsx" # the expert's own file
200
+ REPORT = "eval_runs/nli_judge.json"
201
+
202
+ mapping = GoldMapping(id="ID", input=["Premise", "Hypothesis"], expected="Label", group="Contract")
203
+ gold = load_gold_set(GOLD_FILE, mapping, name="nli-judge", version="2026-10-12")
204
+
205
+
206
+ async def judge(item):
207
+ return await my_judge(item.input["Premise"], item.input["Hypothesis"])
208
+
209
+
210
+ gate = functools.partial(score_judgment, actionable="contradiction", precision=0.8, recall=0.7)
211
+ report = asyncio.run(arun_eval(gold, judge, [gate], repeats=2, concurrency=8, progress=print))
212
+ Path(REPORT).parent.mkdir(parents=True, exist_ok=True)
213
+ Path(REPORT).write_text(report.model_dump_json(indent=1), encoding="utf-8")
214
+ print(report.passed, report.scores[0].gate, "errors", report.errors, "flips", report.flips)
215
+
216
+ stricter = functools.partial(score_judgment, actionable="contradiction", precision=0.9, recall=0.7)
217
+ saved = EvalReport.model_validate_json(Path(REPORT).read_text(encoding="utf-8"))
218
+ print("at 0.9 precision:", rescore_eval(saved, gold, [stricter]).passed)
219
+ ```
220
+
221
+ ## 7. The TDD loop
150
222
  1. Write the eval from the contract + a handful of real gold items → it fails (red) on the unbuilt/weak capability.
151
223
  2. Implement the minimum to pass the gate (green).
152
224
  3. A/B alternatives (rule / trained classifier / decision model / LLM) on the SAME gold; select on gate + diagnostics + cost + calibration.
@@ -158,7 +230,11 @@ SDK version's surface, not prose.
158
230
  - **Gating on a diagnostic** (e.g. nDCG) — report it, don't threshold it.
159
231
  - **No reliability check on a subjective gold** — you can't read a number off a gold whose own labels disagree.
160
232
  - **Eval not isolated** to the capability (measures the whole pipeline) — you can't attribute a regression.
161
- - **Scraping stdout** for metrics — write + read a JSON artifact.
233
+ - **Scraping stdout** for metrics — keep and read the `EvalReport` JSON.
234
+ - **A failed call scored as an answer** (a timeout read as "neutral", an error read as "abstained") — it is an error;
235
+ `arun_eval` keeps it apart (ADR-0133).
236
+ - **Only aggregates kept** — an eval whose per-item outputs were not saved can never be re-scored or checked; keep
237
+ the report.
162
238
  - **Faking a win by shrinking the sample / picking easy items** — real, representative, honest.
163
239
 
164
240
  ## Hand-off / where this sits
@@ -16,6 +16,11 @@ ADR-0110 and the other `docs/` paths are in the engine repository: read them the
16
16
  matching your installed engine.
17
17
  This skill is the operational checklist that ties them together.
18
18
 
19
+ **Which route.** A product deploys and reaches the server through the engine API, `adeploy_model_server` (the
20
+ section after the locked config). The raw `modal deploy` of the bundled script further down is the engine
21
+ developer's route, and what the API runs underneath. **When to stop it** is one rule, in "Cold start & cost": deploy
22
+ once, let it scale to zero between uses, never stop it between runs.
23
+
19
24
  ## The LOCKED production config (ADR-0110) — do not re-litigate
20
25
  **Config B: `Qwen/Qwen3.8-27B-FP8` weights + `--kv-cache-dtype fp8`, on 1× A100-80GB, TP=1, `--max-model-len 16384`, `--gpu-memory-utilization 0.95`.**
21
26
  - Config B (FP8 weights) is the **locked deploy** — 52.71× concurrency @16K (ADR-0110 rounds it to 53×), ~23% higher throughput, ~31 GB weights (30.9 GB on disk, 28.9 GiB in VRAM);
@@ -38,7 +43,7 @@ from rag_wright.api import EngineConfig, ModelServerSpec, adeploy_model_server,
38
43
  server = await adeploy_model_server(ModelServerSpec(name="acme-qwen", max_num_seqs=32)) # key from VLLM_API_KEY
39
44
  config = EngineConfig(store=..., models={"general": server.model_id}) # or any model= argument
40
45
  ...
41
- stop_model_server("acme-qwen") # stop billing
46
+ stop_model_server("acme-qwen") # only to retire it: stopping discards the snapshots (see "Cold start & cost")
42
47
  ```
43
48
 
44
49
  `amodel_server(spec)` reconnects to a server deployed earlier (a restart, another process) without redeploying.
@@ -46,7 +51,7 @@ The API key comes from the variable `ModelServerSpec.api_key_env` names (default
46
51
  key, so set a real one. Needs `rag-wright[modal]` and a Modal login. One app per server name: different names give
47
52
  different servers (and URLs), for example one per tenant.
48
53
 
49
- **The exact working deploy (this succeeded):**
54
+ **The engine developer's route: the raw deploy (this succeeded):**
50
55
  ```
51
56
  VLLM_API_KEY=<a long random string> MODAL_IMAGE_BUILDER_VERSION=2025.06 \
52
57
  APP_NAME=rw-qwen3-modal MODEL=Qwen/Qwen3.8-27B-FP8 KV_CACHE_DTYPE=fp8 \
@@ -58,8 +63,7 @@ VLLM_API_KEY=<a long random string> MODAL_IMAGE_BUILDER_VERSION=2025.06 \
58
63
  The script refuses to deploy without `VLLM_API_KEY`: Modal's web endpoint is public and unauthenticated, so vLLM's
59
64
  `--api-key` is the only gate on a billing A100, and there is no default key. Then wire the engine: `.env`
60
65
  `VLLM_BASE_URL=https://<workspace>--rw-qwen3-modal-serve.modal.run/v1` and the same `VLLM_API_KEY`; the profile
61
- `qwen3.8-27b-modal` routes there (the seam also refuses an unset key). **Stop billing when done:**
62
- `uv run --no-sync modal app stop rw-qwen3-modal --yes` (A100 is expensive).
66
+ `qwen3.8-27b-modal` routes there (the seam also refuses an unset key). When to stop it: "Cold start & cost" below.
63
67
 
64
68
  **The engine does NOT reach Modal by default.** Every role's default is `_PRODUCT_LLM = "qwen3.8-27b-modal-or"`,
65
69
  the same model routed through OpenRouter (a Modal cold start can still take minutes when Modal builds a snapshot). To send calls to the Modal server, set
@@ -123,14 +127,22 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
123
127
  a weight read of 12-154 s from the Volume (9P), then compile-cache load + CUDA-graph capture. Measured and NOT
124
128
  worth adopting (ADR-0109 addendum): `--load-format runai_streamer`, precompiled `.pyc`, `HF_HUB_OFFLINE=1` (it
125
129
  changes vLLM's compile-cache key every container, so each start recompiles). Poll `/health` for readiness.
126
- - **A100 is billed while up — `modal app stop <app> --yes` the moment you're done.** Verify with `modal app list`
127
- (state `stopped`, 0 tasks) + endpoint 404.
128
- - **Do NOT warm the GPU before the consumer is ready, and do NOT trust auto-scaledown to protect billing** (burned
129
- 2026-10-04: a smoke-warmed A100 sat idle ~20 min while unrelated work ran, because "scaledown_window will handle
130
- it" was assumed — it did not, fast enough). RULE: build the bulk/label/eval consumer FIRST (while the app is
131
- stopped/cold), THEN warm → smoke → run → **`modal app stop` immediately after**, in one continuous go. If you warm
132
- only to prove stand-up and the consumer is not next, STOP it right after the smoke. Treat the explicit stop as
133
- mandatory, not the scaledown as sufficient; verify stopped with `modal app list`.
130
+ - **When to stop it -- one rule (EV-6; it used to contradict the line above).** The A100 is billed only while a
131
+ container runs; the server scales to zero after 10 idle minutes (`scaledown_window=600`, no warm minimum) and then
132
+ costs nothing and KEEPS its snapshots, so the next request is back in ~13 s. `modal app stop` saves at most those
133
+ 10 minutes and makes the next deploy pay a 9-15 min snapshot-building boot (2026-10-12: a stop after a failed smoke
134
+ run, then a redeploy, cost a 911 s boot).
135
+ 1. **Deploy once per server name**; reuse the name (a new name builds new snapshots).
136
+ 2. **Build the consumer first** (the bulk / label / eval script, its smoke test, its progress logging) while no
137
+ container runs, then warm, smoke and run in one go. Do not warm a GPU before its consumer is ready (2026-10-04:
138
+ a smoke-warmed A100 sat idle ~20 min while unrelated work ran).
139
+ 3. **Between runs, and when you are done, let it scale to zero.** Never stop it between runs; a script's error
140
+ path must not stop it either when a fix-and-rerun is likely.
141
+ 4. **Check it reached zero**: `modal app list` shows the app `deployed` with 0 tasks about 10 minutes after the
142
+ last call. If tasks remain past the window, find out why (that is the 2026-10-04 burn) and stop it.
143
+ 5. **Stop (`modal app stop <app> --yes`, or `stop_model_server`) only to retire a server**: you will not use it
144
+ for a long time and do not want its endpoint up, or you are replacing its deployment. Expect the next deploy to
145
+ rebuild the snapshots.
134
146
 
135
147
  ## The meta-lesson
136
148
  Config + recipe live in **ADR-0110 + the script + this skill**. Before any Qwen/Modal work: read them, don't
@@ -157,7 +157,24 @@ unset. Check both before trusting a run's numbers.
157
157
  Read the engine's **reference pack** (`load_reference_pack()`) as a worked template — but the contract/compliance
158
158
  domain is only an example; your pack and capabilities are your own.
159
159
 
160
- ## 5. Keep the engine current
160
+ ## 5. Evals behind your product's backend
161
+ Domain experts own the gold; your UI lets them upload it, run it and compare runs. The engine gives you the pieces
162
+ (the `creating-evals` skill has the method and a complete example):
163
+ - **Upload a gold set**: `aload_gold_set(IngestSource(data=uploaded_bytes, name=filename), GoldMapping(...),
164
+ name=..., version=...)` -- CSV / XLSX / JSONL as the expert wrote it; a `GoldImportError` says where the file is
165
+ wrong, which you show as is. Client data stays `local_only` (the default).
166
+ - **Run it as a background job**, never inside the request: start `arun_eval(gold, task, scorers, repeats=...,
167
+ progress=...)` as a task you keep a reference to, return a job id at once, and let the UI poll. `progress` receives
168
+ `[eval] i/N <item> r<k> ok|error` lines; `evaluate_ingestion`'s async form `aevaluate_ingestion` works the same
169
+ way for ingestion structure. The synchronous `run_eval` raises inside a running event loop.
170
+ - **Return the `EvalReport`** (`report.model_dump(mode="json")`): `passed`, each scorer's gate against its
171
+ thresholds and its diagnostics, errors and flips kept apart, every item's outputs.
172
+ - **Keep run history in your store**: save each report with its gold version; `rescore_eval` scores a saved report
173
+ again (new thresholds, a corrected gold) without calling anything. With `langfuse=True` the runs also appear in
174
+ Langfuse with their links (`report.run_urls`), for teams that use it.
175
+ - **The task is your capability through the capability layer**, so the eval measures what production runs.
176
+
177
+ ## 6. Keep the engine current
161
178
 
162
179
  The engine releases in batches (release-please; the engine's `docs/releasing.md`), so you never chase every
163
180
  engine PR:
@@ -185,7 +202,8 @@ mkdir -p .claude/skills && for d in "$SKILLS"/*/; do ln -sfn "${d%/}" ".claude/s
185
202
  ```
186
203
 
187
204
  Re-run it after every engine upgrade (a symlink follows the installed version, but a newly added skill needs a new
188
- link). The Addy-Osmani spec-driven/TDD/planning skills come from their own source, as the product template says.
205
+ link). Link these, and any product-building skills another repo writes for product developers, into this repo's
206
+ `.claude/skills/` only, never into the global Claude Code skills, where they would apply in every repo on the machine. The Addy-Osmani spec-driven/TDD/planning skills come from their own source, as the product template says.
189
207
 
190
208
  ## Anti-patterns
191
209
 
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.8.0"
3
+ }
@@ -4,6 +4,30 @@ 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.8.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.7.0...0.8.0) (2026-10-12)
8
+
9
+
10
+ ### Features
11
+
12
+ * **EV-1:** aevaluate_ingestion for a web backend, with progress and a JSON-ready result ([7e6377a](https://github.com/fzaidi-dai/RAG_Wright/commit/7e6377a8994764c11f08dcf8cdb47633e6f4660c))
13
+ * **EV-2:** gold-set and report contracts, and gold import from CSV, XLSX and JSONL ([4e72d36](https://github.com/fzaidi-dai/RAG_Wright/commit/4e72d368a24045df2a09f0fc3a221c15985cbf73))
14
+ * **EV-3a:** classification and candidate-then-choose scorers, with parity on saved engine outputs ([977f9a8](https://github.com/fzaidi-dai/RAG_Wright/commit/977f9a8aa59b932d4cc1325bb93ffc6edf4b36a1))
15
+ * **EV-3b:** retrieval and relational scorers, with parity on the ACORD bar and the EDGAR graph leg ([b27b86f](https://github.com/fzaidi-dai/RAG_Wright/commit/b27b86f90d79c68f173f1842b99201a73e634870))
16
+ * **EV-3c:** extraction and judgment scorers, with parity on party extraction, ContractNLI and the semantic judge ([f1fc319](https://github.com/fzaidi-dai/RAG_Wright/commit/f1fc31973dd1d65d20d07578d7d41d6b6e91565f))
17
+ * **EV-3d:** generation and ingestion scorers; all eight scorer kinds done ([b082938](https://github.com/fzaidi-dai/RAG_Wright/commit/b082938db3bc42d81584840d63bc79f0a0ec1d65))
18
+ * **EV-4:** the eval runner (arun_eval, run_eval, rescore_eval) ([a1c0512](https://github.com/fzaidi-dai/RAG_Wright/commit/a1c0512b24fdef245869c854494b42ab8040e5b3))
19
+ * **EV-5:** the optional Langfuse backend; model calls nest under their eval item ([fbbc729](https://github.com/fzaidi-dai/RAG_Wright/commit/fbbc72911733392837bae52ac105ab80d2a922a2))
20
+ * **PS-27:** a missing database is created visibly, or refused with create=False ([2e404f2](https://github.com/fzaidi-dai/RAG_Wright/commit/2e404f2bd44bacf278c2314e6ccf412e72b336c9))
21
+ * **PS-31:** rag_wright.api.pdf_page_count, a locked PDF page count for products ([bf83f57](https://github.com/fzaidi-dai/RAG_Wright/commit/bf83f57905f8c9480c2f7890633b7ba3e474cd09))
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * **PS-24:** async model calls work on every event loop in a process (ADR-0135) ([ebd72b2](https://github.com/fzaidi-dai/RAG_Wright/commit/ebd72b2b8b962e20dadb48158d2fb429430038e3))
27
+ * **PS-26:** spreadsheet tables are glued back across blank rows, so no record is read as a header (ADR-0136) ([d0f31ac](https://github.com/fzaidi-dai/RAG_Wright/commit/d0f31ac7628a9aabd079630f18fc86a8da617cfb))
28
+ * **PS-28:** a generated answer states the evidence's support, and "none" is an abstention (ADR-0137) ([cb98642](https://github.com/fzaidi-dai/RAG_Wright/commit/cb9864236d076aea7bf31e09cab18a8eb4575dc2))
29
+ * **PS-29:** PDF parses run one at a time and the engine reaches pdfium through one locked door (ADR-0138) ([f7a17ad](https://github.com/fzaidi-dai/RAG_Wright/commit/f7a17ad7645d0bd269f955e51059a431ce5bad17))
30
+
7
31
  ## [0.7.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.6.0...0.7.0) (2026-10-11)
8
32
 
9
33
 
@@ -55,10 +55,19 @@ 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-11): the public-surface workstream is COMPLETE and released as `rag-wright` 0.6.0** (ledger
58
+ > **CURRENT STATE (2026-10-12): the evals workstream is COMPLETE; `rag-wright` 0.8.0 is ready to release** (ledger
59
+ > `docs/specs/evals/plan.md`, EV-0..EV-6; EV-7 optional): gold sets from experts' files, a scorer per capability kind,
60
+ > the runner `arun_eval` with an optional Langfuse backend, `EvalReport`, `aevaluate_ingestion`; the reference is
61
+ > `docs/evals.md`. With it in 0.8.0: PS-24 (async calls on every event loop, ADR-0135), PS-25 (the release PR bumps
62
+ > `uv.lock`), PS-26 (spreadsheet tables glued across blank rows, ADR-0136), PS-27 (a missing database created
63
+ > visibly, or refused with `create=False`), PS-28 (answers state their support; "none" abstains, ADR-0137), PS-29 and
64
+ > PS-31 (one PDF parse at a time and one locked door to pdfium, `pdf_page_count`; RuleWright issue 0052, ADR-0138).
65
+ > RuleWright's guide: `docs/specs/public-surface/rulewright-migration-0.8.0.md`. Open: PS-30 (a process-pool parse,
66
+ > later). Before it:
67
+ > **The public-surface workstream is COMPLETE and released as `rag-wright` 0.7.0** (ledger
59
68
  > `docs/specs/public-surface/plan.md`, ADR-0128: two public tiers, `rag_wright.api` for a product's seam and
60
69
  > `rag_wright.pack_sdk` for a pack's code, enforced by import contracts and a domain-vocabulary guard). Next:
61
- > RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md`, `-0.5.0.md` and `-0.6.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. Before it,
70
+ > RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md`, `-0.5.0.md`, `-0.6.0.md` and `-0.7.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. 0.7.0 adds PS-20 (the model server cold-starts from a GPU snapshot, ADR-0132) and PS-22 (the model-call deadline follows the timeout; a token cap on thinking models' structured calls, ADR-0133). Before it,
62
71
  > the **ingestion-hooks** workstream (ADR-0124) is
63
72
  > COMPLETE and released as **`rag-wright` 0.2.0** (PyPI + GitHub tag/release `0.2.0`; release process
64
73
  > `docs/releasing.md`): the generic `build_ingestion` with hooks and domain-neutral defaults, the neutral default
@@ -188,6 +197,7 @@ Commits are how the memory above becomes durable. Git history is the parallel re
188
197
  - `building-an-ingestion-capability` (`.claude/skills/building-an-ingestion-capability/SKILL.md`), when a domain needs its documents ingested with `build_ingestion`: deciding the unit, the extractor and optional hooks, the pack record types, tuning with `evaluate_ingestion`, spreadsheets and embedded files (its example is executed by `tests/skills/test_ingestion_skill_example.py`).
189
198
  - `using-the-rag-wright-engine`, the CONSUMER-side playbook (for a product repo building on the engine) — kept here, version-matched to the engine; a product pulls it into its own `.claude/skills/`.
190
199
  - The engine-authored skills above live once in `src/rag_wright/.agents/skills/` and ship in the wheel (PS-10); this repo's `.claude/skills/` entries are symlinks to them, so edit the files there. A product links them from its installed engine (`docs/installation.md`). `tests/arch/test_shipped_skills.py` keeps them packaged, linked and readable from a product repo.
200
+ - Skill placement (ADR-0134): a skill written for product developers goes in `src/rag_wright/.agents/skills/` and is linked into a repo's `.claude/skills/` only, never into the global `~/.claude/skills` (that is for the developer's own way-of-working skills); a skill only for working on this repo is a real folder in `.claude/skills/` and is not shipped.
191
201
  - `Graphify`, for the `framework` and `project` graphs.
192
202
  - The LangChain docs MCP server (`https://docs.langchain.com/mcp`), for understanding LangGraph and Deep Agents concepts. It explains; it does not confirm. Grounding still resolves against the code graph.
193
203
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.7.0
3
+ Version: 0.8.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
@@ -34,6 +34,7 @@ Requires-Dist: langgraph>=1.2.11
34
34
  Requires-Dist: laya>=0.3.22
35
35
  Requires-Dist: mcp>=1.28.1
36
36
  Requires-Dist: olefile>=0.47
37
+ Requires-Dist: openpyxl>=3.1
37
38
  Requires-Dist: pillow>=12.3.0
38
39
  Requires-Dist: pydantic>=2.0
39
40
  Requires-Dist: pypdfium2>=5.11
@@ -112,6 +113,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
112
113
  - **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
113
114
  sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
114
115
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
116
+ - **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
117
+ kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
115
118
  - **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
116
119
  [Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
117
120
  - **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
@@ -57,6 +57,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
57
57
  - **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
58
58
  sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
59
59
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
60
+ - **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
61
+ kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
60
62
  - **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
61
63
  [Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
62
64
  - **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
@@ -0,0 +1,39 @@
1
+ # ADR-0134: Skills for product developers are linked into each product repo, never installed globally
2
+
3
+ **Status:** accepted · **Date:** 2026-10-12 · **Related:** PS-10 (the engine's skills ship in the wheel),
4
+ ADR-0052 (engine/product split)
5
+
6
+ ## Context
7
+
8
+ Two kinds of repo now write skills for people building a product on the engine. The engine writes skills about using
9
+ the engine (`using-the-rag-wright-engine`, `creating-evals`, ...). A product may write generic product-building
10
+ skills (UI, backend, tenancy, workspaces, the agent harness) that a later product can reuse. A skill linked into
11
+ `~/.claude/skills` applies in every repo on the machine: an agent working on the engine, or on an unrelated project, then sees product-building advice that is not meant for it, and a globally linked skill
12
+ follows one checkout rather than the version a given product depends on. The product-starter templates said "link
13
+ the shared generic skills from their source" without saying where to link them.
14
+
15
+ ## Decision
16
+
17
+ Skills live in one of three places, by who they are for:
18
+
19
+ 1. **The developer's own way of working** (TDD, planning, debugging, ADRs) may be installed in `~/.claude/skills`.
20
+ Nothing from the engine or a product repo is linked there.
21
+ 2. **Skills for working on one repo only** are real folders in that repo's `.claude/skills/` and are never shipped.
22
+ 3. **Skills for product developers** live in a source folder in the repo that writes them, and each product links them
23
+ into its own `.claude/skills/` (gitignored), never globally:
24
+ - the engine's: `src/rag_wright/.agents/skills/`, shipped in the wheel (PS-10). A product links them from its
25
+ installed engine (the copy that matches the version it runs) or, while co-developing, from an engine checkout;
26
+ both are links into the product's own `.claude/skills/`;
27
+ - a product's own: wherever that product keeps them, outside the engine's concern.
28
+
29
+ The engine's docs, templates and skills that show how to link skills only ever link into the product repo's
30
+ `.claude/skills/`; `tests/arch/test_shipped_skills.py` fails on a command in them that links into
31
+ `~/.claude/skills`.
32
+
33
+ ## Consequences
34
+
35
+ - An engine session sees the engine's skills through this repo's `.claude/skills/` links only; a session in an
36
+ unrelated repo does not see them.
37
+ - A product re-runs its link step after an engine upgrade (as before) and after pulling a new generic skill.
38
+ - The engine governs only its own skills, docs and templates; where a product keeps its skills is the product's
39
+ decision, and the engine's templates name the slot (`{{PRODUCT_DEV_SKILL_SOURCES}}`) without naming a folder.
@@ -0,0 +1,29 @@
1
+ # ADR-0135: The model seam gives each event loop its own async HTTP client
2
+
3
+ **Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0056/0057 (the bounded retry and the async
4
+ deadline), EV-0 finding 5 (`docs/specs/evals/plan.md`), PS-24
5
+
6
+ ## Context
7
+
8
+ langchain_openai's `ChatOpenAI` takes its async HTTP client at construction, and by default shares one cached
9
+ client per base URL and timeout across the whole process. httpx's pooled connections belong to the event loop that
10
+ opened them. The seam builds runnables once and calls them later, possibly on another loop: Langfuse's
11
+ `run_experiment` runs every experiment on a fresh loop, and a web backend has its own loop beside a worker's. EV-0
12
+ saw the first calls of the second run fail at once with `APIConnectionError` (`Event loop is closed` underneath);
13
+ the seam's retry recovered them, at the cost of a retry, and a burst at the start of a run could use up the
14
+ retries.
15
+
16
+ ## Decision
17
+
18
+ `build_model` passes `ChatOpenAI` an `httpx.AsyncClient` (`_LoopLocalAsyncClient`) that sends each request through
19
+ a client of the running event loop. That client is built the way langchain_openai builds its default (its own
20
+ builder and socket options), kept per loop in a weak map so it goes with the loop, and the wrapper is cached per
21
+ base URL and timeout, so calls on one loop still share their connections. A caller's own `http_async_client` wins,
22
+ and with `OPENAI_PROXY` set langchain_openai keeps building its proxied client.
23
+
24
+ ## Consequences
25
+
26
+ - Async calls work on every event loop in a process, with no retry spent; synchronous calls are unchanged.
27
+ - The seam now imports two private langchain_openai helpers (`_build_async_httpx_client`,
28
+ `_resolve_socket_options`), so the per-loop client matches the default exactly; a langchain_openai upgrade that
29
+ moves them fails at import, and the tests in `tests/models/test_seam_event_loops.py` show it.
@@ -0,0 +1,38 @@
1
+ # ADR-0136: A spreadsheet table cut at its blank rows is glued back together after the parse
2
+
3
+ **Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0124 (ING-4a hidden sheets, ING-6 embedded files,
4
+ ING-7 `table_rows`), EV-2 (gold import), PS-26
5
+
6
+ ## Context
7
+
8
+ docling cuts a sheet into separate tables at every blank row (its Excel backend's `gap_tolerance` defaults to 0),
9
+ and the whole engine reads each table's first row as its header: `table_rows`, the compact table text, the segmenter,
10
+ record units and the row-span map. A database sheet with blank rows between blocks therefore lost the first record
11
+ after each blank row, and the rows after it were keyed under that record's values (a 5-record fixture kept 3).
12
+ Raising `gap_tolerance` is not a fix: it also merges a title block and a different table below into one table.
13
+
14
+ ## Decision
15
+
16
+ After the parse (`capabilities/sheet_tables.py`), every table piece directly below another in the same columns,
17
+ with only blank rows between, is decided by its first row:
18
+
19
+ - **data, glued on**: the number or date columns agree (every data row above has a number or date there, the
20
+ header does not, and the first row does), or, with no such columns, the formatting does (the header is bold or
21
+ filled differently from the data rows, read with openpyxl, and the first row is formatted like the data);
22
+ - **header, left apart**: the same header repeated, a header-formatted row, text in a number column, a table above
23
+ whose top row does not name every column its rows use (a form's section label), or a first row that does not fill
24
+ the columns the rows above fill;
25
+ - **unsure, left apart and warned**: a text-only table with no formatting difference, which the file alone cannot
26
+ decide. `evaluate_ingestion` lists it in a new `warnings` list (never a failure).
27
+
28
+ A glued table keeps each block's sheet rectangle as another `prov` entry, so an embedded file anchored on a sheet
29
+ cell still maps to its table row (`_table_at` walks the blocks). The merge runs on a fresh parse and once on a parse
30
+ cached before it (the ING-4a pattern), so no cache key changes. `openpyxl` is declared (it was installed through
31
+ docling).
32
+
33
+ ## Consequences
34
+
35
+ - A database sheet's records survive its blank rows; titles, forms and different tables are parsed as before.
36
+ - On the five TexWright workbooks (measured locally, structure only): nothing glued, 63 tables and 596 rows as
37
+ before, 2 warnings (one-column lists separated by a blank row).
38
+ - A sheet shape none of the rules covers is added as a new case when a customer's file shows it.
@@ -0,0 +1,34 @@
1
+ # ADR-0137: A generated answer states the evidence's support every time, and "none" is an abstention
2
+
3
+ **Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0045 (free text with light tags), PREC-1a
4
+ (`answer_kind`), EV-3d (`score_generation`), PS-28
5
+
6
+ ## Context
7
+
8
+ The answer generator offered `<abstain/>` as an optional alternative output. Asked about something the evidence
9
+ does not contain, the model wrote "the provided evidence does not contain X" inside `<answer>`, cited evidence, and
10
+ the parser labelled it `answered` (EV-3d, live: 20 of 20 questions asked of contracts that lack the clause). A
11
+ product showed an answered, cited result for something that is not there.
12
+
13
+ ## Decision
14
+
15
+ 1. The tag instructions require `<support>full|partial|none</support>` on every response, judged by meaning rather
16
+ than labels (text that serves the purpose asked about answers it even when the question's wording never
17
+ appears). `none` is for when nothing in the evidence answers any part of the question, including a reply that
18
+ the evidence has no such provision; it cites nothing.
19
+ 2. The parser maps `none` to an abstention that keeps the model's sentence as its reason (scrubbed of ids like any
20
+ prose the reader sees), `partial` to `partial` and `full` to `answered`. A response without the tag parses as
21
+ before (`<partial/>`, else answered).
22
+ 3. The `generation` skill says the same. No phrase matching on the answer text (English-only, and it would catch
23
+ real answers such as "the agreement does not allow assignment").
24
+
25
+ Rejected: treating `none` with citations as `partial` (measured: false answers back to 8 of 20).
26
+
27
+ ## Consequences
28
+
29
+ - Measured once on the EV-3d set (20 answerable, 20 not): false answers 20/20 -> 0/20; false abstentions 0/20 ->
30
+ 4/20, all hard cases (gold answers starting mid-sentence, a party named only in a header); citation recall
31
+ 0.946 -> 0.758, the old figure inflated by "does not contain" answers whose citations happened to hold the gold.
32
+ Generation varies near the abstain boundary: one run, not a distribution.
33
+ - A product sees an abstention, with the model's one-sentence reason in `answer`, where it used to see an answered
34
+ "not found".