rag-wright 0.2.1__tar.gz → 0.3.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 (1114) hide show
  1. rag_wright-0.3.0/.claude/skills/authoring-a-capability/SKILL.md +153 -0
  2. rag_wright-0.3.0/.claude/skills/building-an-ingestion-capability/SKILL.md +161 -0
  3. rag_wright-0.3.0/.claude/skills/creating-evals/SKILL.md +156 -0
  4. rag_wright-0.3.0/.claude/skills/laya/SKILL.md +136 -0
  5. rag_wright-0.3.0/.claude/skills/qwen-vllm-modal/SKILL.md +109 -0
  6. rag_wright-0.3.0/.claude/skills/setfit/SKILL.md +311 -0
  7. rag_wright-0.3.0/.claude/skills/using-the-rag-wright-engine/SKILL.md +175 -0
  8. rag_wright-0.3.0/.release-please-manifest.json +3 -0
  9. rag_wright-0.3.0/CHANGELOG.md +130 -0
  10. rag_wright-0.3.0/CLAUDE.md +216 -0
  11. rag_wright-0.3.0/PKG-INFO +192 -0
  12. rag_wright-0.3.0/README.md +139 -0
  13. rag_wright-0.3.0/docs/ARCHITECTURE_OVERVIEW.md +229 -0
  14. rag_wright-0.3.0/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +25 -0
  15. rag_wright-0.3.0/docs/adr/0125-qwen-openrouter-unpinned.md +35 -0
  16. rag_wright-0.3.0/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +46 -0
  17. rag_wright-0.3.0/docs/adr/0127-retire-the-okf-code.md +29 -0
  18. rag_wright-0.3.0/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +37 -0
  19. rag_wright-0.3.0/docs/adr/README.md +187 -0
  20. rag_wright-0.3.0/docs/api/README.md +389 -0
  21. rag_wright-0.3.0/docs/api/pack_sdk.md +507 -0
  22. rag_wright-0.3.0/docs/architecture.md +116 -0
  23. rag_wright-0.3.0/docs/concepts.md +155 -0
  24. rag_wright-0.3.0/docs/configuration.md +123 -0
  25. rag_wright-0.3.0/docs/domain-adaptation/_engine-gaps.md +173 -0
  26. rag_wright-0.3.0/docs/domain-adaptation/authoring-capabilities.md +119 -0
  27. rag_wright-0.3.0/docs/domain-adaptation/classification-and-decision-models.md +237 -0
  28. rag_wright-0.3.0/docs/domain-adaptation/entity-resolution.md +119 -0
  29. rag_wright-0.3.0/docs/domain-adaptation/kg-construction.md +153 -0
  30. rag_wright-0.3.0/docs/installation.md +131 -0
  31. rag_wright-0.3.0/docs/product/capability_profiles.md +166 -0
  32. rag_wright-0.3.0/docs/product/seam-adaptation-guide.md +64 -0
  33. rag_wright-0.3.0/docs/reference-pack.md +133 -0
  34. rag_wright-0.3.0/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +299 -0
  35. rag_wright-0.3.0/docs/specs/public-surface/plan.md +87 -0
  36. rag_wright-0.3.0/docs/specs/public-surface/rulewright-migration-0.3.0.md +85 -0
  37. rag_wright-0.3.0/docs/templates/product-starter/CLAUDE.md.template +229 -0
  38. rag_wright-0.3.0/docs/templates/product-starter/README.md +52 -0
  39. rag_wright-0.3.0/docs/templates/product-starter/playbook.md.template +221 -0
  40. rag_wright-0.3.0/eval/kg_primary.py +400 -0
  41. rag_wright-0.3.0/pyproject.toml +169 -0
  42. rag_wright-0.3.0/scripts/acquire_cuad.py +184 -0
  43. rag_wright-0.3.0/scripts/backfill_affiliations.py +108 -0
  44. rag_wright-0.3.0/scripts/build_api_docs.py +120 -0
  45. rag_wright-0.3.0/scripts/fetch_reference_models.py +185 -0
  46. rag_wright-0.3.0/scripts/modal_qwen3_vllm_server.py +1 -0
  47. rag_wright-0.3.0/scripts/prep_relational_verification.py +116 -0
  48. rag_wright-0.3.0/scripts/stack_correctness_validate.py +120 -0
  49. rag_wright-0.3.0/src/rag_wright/api/__init__.py +96 -0
  50. rag_wright-0.3.0/src/rag_wright/api/answers.py +49 -0
  51. rag_wright-0.3.0/src/rag_wright/api/config.py +73 -0
  52. rag_wright-0.3.0/src/rag_wright/api/discover.py +70 -0
  53. rag_wright-0.3.0/src/rag_wright/api/documents.py +67 -0
  54. rag_wright-0.3.0/src/rag_wright/api/kg.py +87 -0
  55. rag_wright-0.3.0/src/rag_wright/api/tracing.py +19 -0
  56. rag_wright-0.3.0/src/rag_wright/api/usage.py +33 -0
  57. rag_wright-0.3.0/src/rag_wright/api/workspace.py +97 -0
  58. rag_wright-0.3.0/src/rag_wright/capabilities/answer_generator.py +432 -0
  59. rag_wright-0.3.0/src/rag_wright/capabilities/disambiguation.py +165 -0
  60. rag_wright-0.3.0/src/rag_wright/capabilities/document_parse.py +300 -0
  61. rag_wright-0.3.0/src/rag_wright/capabilities/entity_resolution.py +156 -0
  62. rag_wright-0.3.0/src/rag_wright/capabilities/manifests.py +355 -0
  63. rag_wright-0.3.0/src/rag_wright/capabilities/remote_encoders.py +62 -0
  64. rag_wright-0.3.0/src/rag_wright/capabilities/retrieval_core.py +126 -0
  65. rag_wright-0.3.0/src/rag_wright/capabilities/rlm_chunking.py +824 -0
  66. rag_wright-0.3.0/src/rag_wright/capabilities/span_relevance_judgment.py +201 -0
  67. rag_wright-0.3.0/src/rag_wright/contracts/extraction.py +128 -0
  68. rag_wright-0.3.0/src/rag_wright/contracts/ingestion.py +338 -0
  69. rag_wright-0.3.0/src/rag_wright/contracts/span.py +129 -0
  70. rag_wright-0.3.0/src/rag_wright/corpus/canonicalize.py +122 -0
  71. rag_wright-0.3.0/src/rag_wright/corpus/document_parser.py +362 -0
  72. rag_wright-0.3.0/src/rag_wright/ingestion/builder.py +496 -0
  73. rag_wright-0.3.0/src/rag_wright/ingestion/evaluate.py +236 -0
  74. rag_wright-0.3.0/src/rag_wright/ingestion/group.py +168 -0
  75. rag_wright-0.3.0/src/rag_wright/models/profiles.py +321 -0
  76. rag_wright-0.3.0/src/rag_wright/models/seam.py +503 -0
  77. rag_wright-0.3.0/src/rag_wright/models/tag_structured.py +285 -0
  78. rag_wright-0.3.0/src/rag_wright/models/weights.py +24 -0
  79. rag_wright-0.3.0/src/rag_wright/pack_sdk/__init__.py +113 -0
  80. rag_wright-0.3.0/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +153 -0
  81. rag_wright-0.3.0/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +322 -0
  82. rag_wright-0.3.0/src/rag_wright/packs/compliance/capabilities/compliance_store.py +138 -0
  83. rag_wright-0.3.0/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +251 -0
  84. rag_wright-0.3.0/src/rag_wright/packs/compliance/mcp/compliance_server.py +304 -0
  85. rag_wright-0.3.0/src/rag_wright/packs/compliance/pack.py +206 -0
  86. rag_wright-0.3.0/src/rag_wright/packs/compliance/schemas/compliance.py +303 -0
  87. rag_wright-0.3.0/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +1041 -0
  88. rag_wright-0.3.0/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +307 -0
  89. rag_wright-0.3.0/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +137 -0
  90. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +118 -0
  91. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +410 -0
  92. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +589 -0
  93. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +238 -0
  94. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +135 -0
  95. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +125 -0
  96. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +94 -0
  97. rag_wright-0.3.0/src/rag_wright/packs/contracts/capabilities/query_understanding.py +110 -0
  98. rag_wright-0.3.0/src/rag_wright/packs/contracts/corpus/cuad.py +153 -0
  99. rag_wright-0.3.0/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +73 -0
  100. rag_wright-0.3.0/src/rag_wright/packs/contracts/corpus/edgar.py +231 -0
  101. rag_wright-0.3.0/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +120 -0
  102. rag_wright-0.3.0/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +173 -0
  103. rag_wright-0.3.0/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +174 -0
  104. rag_wright-0.3.0/src/rag_wright/packs/contracts/mcp/session_store.py +64 -0
  105. rag_wright-0.3.0/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +193 -0
  106. rag_wright-0.3.0/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +2751 -0
  107. rag_wright-0.3.0/src/rag_wright/packs/contracts/ontology/loader.py +287 -0
  108. rag_wright-0.3.0/src/rag_wright/packs/contracts/pack.py +396 -0
  109. rag_wright-0.3.0/src/rag_wright/packs/contracts/schemas/ontology.py +85 -0
  110. rag_wright-0.3.0/src/rag_wright/packs/contracts/schemas/property.py +201 -0
  111. rag_wright-0.3.0/src/rag_wright/packs/contracts/skills/guidance/__init__.py +15 -0
  112. rag_wright-0.3.0/src/rag_wright/packs/contracts/skills/guidance/chunking.md +2 -0
  113. rag_wright-0.3.0/src/rag_wright/packs/contracts/skills/guidance/generation.md +9 -0
  114. rag_wright-0.3.0/src/rag_wright/packs/contracts/skills/guidance/relevance.md +9 -0
  115. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/boundary.py +135 -0
  116. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +519 -0
  117. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +338 -0
  118. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/dim_classifier.py +159 -0
  119. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +104 -0
  120. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +120 -0
  121. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/model_capabilities.py +118 -0
  122. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/new_function_labels.py +112 -0
  123. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/property_extractor.py +390 -0
  124. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/property_grounding.py +182 -0
  125. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/residual_candidates.py +180 -0
  126. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +106 -0
  127. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/segment.py +282 -0
  128. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/semantic_judge.py +272 -0
  129. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/symbolic_validation.py +131 -0
  130. rag_wright-0.3.0/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +182 -0
  131. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +204 -0
  132. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +1072 -0
  133. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +331 -0
  134. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +73 -0
  135. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +168 -0
  136. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +171 -0
  137. rag_wright-0.3.0/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +281 -0
  138. rag_wright-0.3.0/src/rag_wright/packs/reference_seam.py +136 -0
  139. rag_wright-0.3.0/src/rag_wright/skills/generation/SKILL.md +67 -0
  140. rag_wright-0.3.0/src/rag_wright/skills/rlm/agent.py +292 -0
  141. rag_wright-0.3.0/src/rag_wright/skills/span_relevance_judgment/SKILL.md +64 -0
  142. rag_wright-0.3.0/src/rag_wright/store/arcadedb.py +1049 -0
  143. rag_wright-0.3.0/src/rag_wright/store/seam.py +240 -0
  144. rag_wright-0.3.0/src/rag_wright/subgraphs/scaffold.py +70 -0
  145. rag_wright-0.3.0/tasks.md +5083 -0
  146. rag_wright-0.3.0/tests/api/test_answers_exports.py +102 -0
  147. rag_wright-0.3.0/tests/api/test_bytes_ingest.py +77 -0
  148. rag_wright-0.3.0/tests/api/test_decision_swap_doc_example.py +92 -0
  149. rag_wright-0.3.0/tests/api/test_invoke.py +312 -0
  150. rag_wright-0.3.0/tests/api/test_kg.py +88 -0
  151. rag_wright-0.3.0/tests/api/test_mcp.py +108 -0
  152. rag_wright-0.3.0/tests/api/test_metering_tracing_exports.py +42 -0
  153. rag_wright-0.3.0/tests/api/test_model_role_export.py +21 -0
  154. rag_wright-0.3.0/tests/api/test_pack_sdk.py +47 -0
  155. rag_wright-0.3.0/tests/api/test_pack_store.py +52 -0
  156. rag_wright-0.3.0/tests/arch/domain_vocabulary_baseline.json +19 -0
  157. rag_wright-0.3.0/tests/arch/test_api_docs_current.py +25 -0
  158. rag_wright-0.3.0/tests/arch/test_engine_domain_vocabulary.py +104 -0
  159. rag_wright-0.3.0/tests/arch/test_import_contracts.py +51 -0
  160. rag_wright-0.3.0/tests/arch/test_packs_use_store_primitives.py +15 -0
  161. rag_wright-0.3.0/tests/arch/test_shipped_skills.py +68 -0
  162. rag_wright-0.3.0/tests/capabilities/test_authoring_contract.py +77 -0
  163. rag_wright-0.3.0/tests/capabilities/test_chunking_prompts_neutral.py +57 -0
  164. rag_wright-0.3.0/tests/capabilities/test_contract_kg_store_reads.py +132 -0
  165. rag_wright-0.3.0/tests/capabilities/test_contract_taxonomy_and_spans.py +103 -0
  166. rag_wright-0.3.0/tests/capabilities/test_disambiguation.py +173 -0
  167. rag_wright-0.3.0/tests/capabilities/test_entity_rules_plumbing.py +29 -0
  168. rag_wright-0.3.0/tests/capabilities/test_graph_extraction.py +184 -0
  169. rag_wright-0.3.0/tests/capabilities/test_requirement_extraction.py +259 -0
  170. rag_wright-0.3.0/tests/capabilities/test_runtime_registry.py +32 -0
  171. rag_wright-0.3.0/tests/capabilities/test_span_relevance_judgment.py +175 -0
  172. rag_wright-0.3.0/tests/capabilities/test_vlm_ocr.py +103 -0
  173. rag_wright-0.3.0/tests/corpus/test_canonicalize.py +111 -0
  174. rag_wright-0.3.0/tests/ingestion/test_chunk_discoverer_hook.py +33 -0
  175. rag_wright-0.3.0/tests/ingestion/test_unit_representative.py +143 -0
  176. rag_wright-0.3.0/tests/models/test_models_dir.py +67 -0
  177. rag_wright-0.3.0/tests/models/test_profile_seam.py +254 -0
  178. rag_wright-0.3.0/tests/models/test_serving_wiring.py +82 -0
  179. rag_wright-0.3.0/tests/scripts/test_fetch_reference_models.py +69 -0
  180. rag_wright-0.3.0/tests/spans/test_clause_classifier_tags_0005.py +53 -0
  181. rag_wright-0.3.0/tests/spans/test_dim_fleet_live.py +147 -0
  182. rag_wright-0.3.0/tests/spans/test_setfit_clause_adapter.py +71 -0
  183. rag_wright-0.3.0/tests/spans/test_setfit_probabilities.py +64 -0
  184. rag_wright-0.3.0/tests/store/test_arcadedb_clause_kg.py +204 -0
  185. rag_wright-0.3.0/tests/store/test_arcadedb_schema.py +264 -0
  186. rag_wright-0.3.0/tests/store/test_contract_kg_store_live.py +110 -0
  187. rag_wright-0.3.0/tests/store/test_kg_mutations.py +142 -0
  188. rag_wright-0.3.0/tests/subgraphs/test_contract_ingestion_pipeline.py +351 -0
  189. rag_wright-0.3.0/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +245 -0
  190. rag_wright-0.3.0/tests/subgraphs/test_intra_document_qa.py +393 -0
  191. rag_wright-0.3.0/tests/subgraphs/test_partial_entry_contract.py +90 -0
  192. rag_wright-0.3.0/tests/subgraphs/test_typed_property_retrieval.py +244 -0
  193. rag_wright-0.3.0/uv.lock +4863 -0
  194. rag_wright-0.2.1/.claude/skills/authoring-a-capability/SKILL.md +0 -145
  195. rag_wright-0.2.1/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -149
  196. rag_wright-0.2.1/.claude/skills/creating-evals/SKILL.md +0 -146
  197. rag_wright-0.2.1/.claude/skills/laya/SKILL.md +0 -137
  198. rag_wright-0.2.1/.claude/skills/qwen-vllm-modal/SKILL.md +0 -104
  199. rag_wright-0.2.1/.claude/skills/setfit/SKILL.md +0 -304
  200. rag_wright-0.2.1/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -146
  201. rag_wright-0.2.1/.release-please-manifest.json +0 -3
  202. rag_wright-0.2.1/CHANGELOG.md +0 -97
  203. rag_wright-0.2.1/CLAUDE.md +0 -211
  204. rag_wright-0.2.1/PKG-INFO +0 -192
  205. rag_wright-0.2.1/README.md +0 -139
  206. rag_wright-0.2.1/docs/ARCHITECTURE_OVERVIEW.md +0 -229
  207. rag_wright-0.2.1/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -25
  208. rag_wright-0.2.1/docs/adr/README.md +0 -183
  209. rag_wright-0.2.1/docs/api/README.md +0 -293
  210. rag_wright-0.2.1/docs/architecture.md +0 -113
  211. rag_wright-0.2.1/docs/concepts.md +0 -154
  212. rag_wright-0.2.1/docs/configuration.md +0 -118
  213. rag_wright-0.2.1/docs/domain-adaptation/_engine-gaps.md +0 -217
  214. rag_wright-0.2.1/docs/domain-adaptation/authoring-capabilities.md +0 -113
  215. rag_wright-0.2.1/docs/domain-adaptation/classification-and-decision-models.md +0 -112
  216. rag_wright-0.2.1/docs/domain-adaptation/entity-resolution.md +0 -115
  217. rag_wright-0.2.1/docs/domain-adaptation/kg-construction.md +0 -147
  218. rag_wright-0.2.1/docs/installation.md +0 -119
  219. rag_wright-0.2.1/docs/product/capability_profiles.md +0 -166
  220. rag_wright-0.2.1/docs/product/seam-adaptation-guide.md +0 -64
  221. rag_wright-0.2.1/docs/reference-pack.md +0 -98
  222. rag_wright-0.2.1/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -296
  223. rag_wright-0.2.1/docs/templates/product-starter/CLAUDE.md.template +0 -225
  224. rag_wright-0.2.1/docs/templates/product-starter/README.md +0 -52
  225. rag_wright-0.2.1/docs/templates/product-starter/playbook.md.template +0 -210
  226. rag_wright-0.2.1/eval/ablation.py +0 -58
  227. rag_wright-0.2.1/eval/category_retrieval.py +0 -118
  228. rag_wright-0.2.1/eval/kg_primary.py +0 -400
  229. rag_wright-0.2.1/eval/okf_gold.py +0 -214
  230. rag_wright-0.2.1/eval/reachability.py +0 -344
  231. rag_wright-0.2.1/eval/test_category_retrieval.py +0 -54
  232. rag_wright-0.2.1/eval/test_okf_gold.py +0 -164
  233. rag_wright-0.2.1/eval/test_reachability.py +0 -134
  234. rag_wright-0.2.1/pyproject.toml +0 -149
  235. rag_wright-0.2.1/scripts/acquire_cuad.py +0 -183
  236. rag_wright-0.2.1/scripts/backfill_affiliations.py +0 -106
  237. rag_wright-0.2.1/scripts/build_api_docs.py +0 -99
  238. rag_wright-0.2.1/scripts/prep_relational_verification.py +0 -113
  239. rag_wright-0.2.1/scripts/stack_correctness_validate.py +0 -120
  240. rag_wright-0.2.1/src/rag_wright/api/__init__.py +0 -83
  241. rag_wright-0.2.1/src/rag_wright/api/config.py +0 -61
  242. rag_wright-0.2.1/src/rag_wright/api/discover.py +0 -70
  243. rag_wright-0.2.1/src/rag_wright/api/documents.py +0 -47
  244. rag_wright-0.2.1/src/rag_wright/api/kg.py +0 -64
  245. rag_wright-0.2.1/src/rag_wright/api/usage.py +0 -30
  246. rag_wright-0.2.1/src/rag_wright/api/workspace.py +0 -86
  247. rag_wright-0.2.1/src/rag_wright/capabilities/answer_generator.py +0 -427
  248. rag_wright-0.2.1/src/rag_wright/capabilities/disambiguation.py +0 -163
  249. rag_wright-0.2.1/src/rag_wright/capabilities/document_parse.py +0 -300
  250. rag_wright-0.2.1/src/rag_wright/capabilities/entity_resolution.py +0 -154
  251. rag_wright-0.2.1/src/rag_wright/capabilities/manifests.py +0 -355
  252. rag_wright-0.2.1/src/rag_wright/capabilities/okf_navigate.py +0 -456
  253. rag_wright-0.2.1/src/rag_wright/capabilities/remote_encoders.py +0 -62
  254. rag_wright-0.2.1/src/rag_wright/capabilities/retrieval_core.py +0 -126
  255. rag_wright-0.2.1/src/rag_wright/capabilities/rlm_chunking.py +0 -808
  256. rag_wright-0.2.1/src/rag_wright/capabilities/span_relevance_judgment.py +0 -191
  257. rag_wright-0.2.1/src/rag_wright/contracts/extraction.py +0 -128
  258. rag_wright-0.2.1/src/rag_wright/contracts/ingestion.py +0 -306
  259. rag_wright-0.2.1/src/rag_wright/contracts/span.py +0 -129
  260. rag_wright-0.2.1/src/rag_wright/corpus/canonicalize.py +0 -116
  261. rag_wright-0.2.1/src/rag_wright/corpus/document_parser.py +0 -362
  262. rag_wright-0.2.1/src/rag_wright/ingestion/builder.py +0 -468
  263. rag_wright-0.2.1/src/rag_wright/ingestion/evaluate.py +0 -235
  264. rag_wright-0.2.1/src/rag_wright/ingestion/group.py +0 -145
  265. rag_wright-0.2.1/src/rag_wright/models/profiles.py +0 -332
  266. rag_wright-0.2.1/src/rag_wright/models/seam.py +0 -497
  267. rag_wright-0.2.1/src/rag_wright/models/tag_structured.py +0 -285
  268. rag_wright-0.2.1/src/rag_wright/okf/__init__.py +0 -11
  269. rag_wright-0.2.1/src/rag_wright/okf/compile.py +0 -292
  270. rag_wright-0.2.1/src/rag_wright/okf/document.py +0 -47
  271. rag_wright-0.2.1/src/rag_wright/okf/enrich.py +0 -176
  272. rag_wright-0.2.1/src/rag_wright/okf/links.py +0 -190
  273. rag_wright-0.2.1/src/rag_wright/okf/lint.py +0 -105
  274. rag_wright-0.2.1/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -153
  275. rag_wright-0.2.1/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -322
  276. rag_wright-0.2.1/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -138
  277. rag_wright-0.2.1/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -250
  278. rag_wright-0.2.1/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -299
  279. rag_wright-0.2.1/src/rag_wright/packs/compliance/pack.py +0 -210
  280. rag_wright-0.2.1/src/rag_wright/packs/compliance/schemas/compliance.py +0 -303
  281. rag_wright-0.2.1/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -1041
  282. rag_wright-0.2.1/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -307
  283. rag_wright-0.2.1/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -137
  284. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -118
  285. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -456
  286. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -585
  287. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -243
  288. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -134
  289. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -125
  290. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -94
  291. rag_wright-0.2.1/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -109
  292. rag_wright-0.2.1/src/rag_wright/packs/contracts/corpus/cuad.py +0 -153
  293. rag_wright-0.2.1/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -73
  294. rag_wright-0.2.1/src/rag_wright/packs/contracts/corpus/edgar.py +0 -231
  295. rag_wright-0.2.1/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -120
  296. rag_wright-0.2.1/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -170
  297. rag_wright-0.2.1/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -171
  298. rag_wright-0.2.1/src/rag_wright/packs/contracts/mcp/session_store.py +0 -64
  299. rag_wright-0.2.1/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -191
  300. rag_wright-0.2.1/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -2741
  301. rag_wright-0.2.1/src/rag_wright/packs/contracts/ontology/loader.py +0 -270
  302. rag_wright-0.2.1/src/rag_wright/packs/contracts/pack.py +0 -420
  303. rag_wright-0.2.1/src/rag_wright/packs/contracts/schemas/ontology.py +0 -85
  304. rag_wright-0.2.1/src/rag_wright/packs/contracts/schemas/property.py +0 -201
  305. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/boundary.py +0 -135
  306. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -490
  307. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -338
  308. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -158
  309. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -103
  310. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -119
  311. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -107
  312. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -111
  313. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -389
  314. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -182
  315. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -180
  316. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -105
  317. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/segment.py +0 -282
  318. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -271
  319. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -131
  320. rag_wright-0.2.1/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -182
  321. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -204
  322. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -985
  323. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -328
  324. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -73
  325. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -165
  326. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -171
  327. rag_wright-0.2.1/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -278
  328. rag_wright-0.2.1/src/rag_wright/packs/reference_seam.py +0 -135
  329. rag_wright-0.2.1/src/rag_wright/skills/generation/SKILL.md +0 -64
  330. rag_wright-0.2.1/src/rag_wright/skills/okf_navigate/SKILL.md +0 -137
  331. rag_wright-0.2.1/src/rag_wright/skills/rlm/agent.py +0 -292
  332. rag_wright-0.2.1/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -67
  333. rag_wright-0.2.1/src/rag_wright/store/arcadedb.py +0 -986
  334. rag_wright-0.2.1/src/rag_wright/store/seam.py +0 -219
  335. rag_wright-0.2.1/src/rag_wright/subgraphs/scaffold.py +0 -70
  336. rag_wright-0.2.1/tasks.md +0 -5071
  337. rag_wright-0.2.1/tests/api/test_invoke.py +0 -311
  338. rag_wright-0.2.1/tests/api/test_kg.py +0 -87
  339. rag_wright-0.2.1/tests/api/test_mcp.py +0 -108
  340. rag_wright-0.2.1/tests/arch/test_api_docs_current.py +0 -17
  341. rag_wright-0.2.1/tests/arch/test_import_contracts.py +0 -33
  342. rag_wright-0.2.1/tests/capabilities/test_authoring_contract.py +0 -79
  343. rag_wright-0.2.1/tests/capabilities/test_contract_kg_store_reads.py +0 -133
  344. rag_wright-0.2.1/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -103
  345. rag_wright-0.2.1/tests/capabilities/test_disambiguation.py +0 -171
  346. rag_wright-0.2.1/tests/capabilities/test_graph_extraction.py +0 -186
  347. rag_wright-0.2.1/tests/capabilities/test_okf_compile.py +0 -184
  348. rag_wright-0.2.1/tests/capabilities/test_okf_links.py +0 -92
  349. rag_wright-0.2.1/tests/capabilities/test_okf_navigate.py +0 -129
  350. rag_wright-0.2.1/tests/capabilities/test_requirement_extraction.py +0 -262
  351. rag_wright-0.2.1/tests/capabilities/test_runtime_registry.py +0 -32
  352. rag_wright-0.2.1/tests/capabilities/test_span_relevance_judgment.py +0 -116
  353. rag_wright-0.2.1/tests/capabilities/test_vlm_ocr.py +0 -103
  354. rag_wright-0.2.1/tests/corpus/test_canonicalize.py +0 -96
  355. rag_wright-0.2.1/tests/models/test_profile_seam.py +0 -254
  356. rag_wright-0.2.1/tests/models/test_serving_wiring.py +0 -82
  357. rag_wright-0.2.1/tests/spans/test_clause_classifier_tags_0005.py +0 -54
  358. rag_wright-0.2.1/tests/spans/test_dim_fleet_live.py +0 -147
  359. rag_wright-0.2.1/tests/spans/test_setfit_clause_adapter.py +0 -70
  360. rag_wright-0.2.1/tests/store/test_arcadedb_clause_kg.py +0 -193
  361. rag_wright-0.2.1/tests/store/test_arcadedb_schema.py +0 -253
  362. rag_wright-0.2.1/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -351
  363. rag_wright-0.2.1/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -223
  364. rag_wright-0.2.1/tests/subgraphs/test_intra_document_qa.py +0 -395
  365. rag_wright-0.2.1/tests/subgraphs/test_partial_entry_contract.py +0 -81
  366. rag_wright-0.2.1/tests/subgraphs/test_typed_property_retrieval.py +0 -244
  367. rag_wright-0.2.1/uv.lock +0 -4863
  368. {rag_wright-0.2.1 → rag_wright-0.3.0}/.claude/settings.json +0 -0
  369. {rag_wright-0.2.1 → rag_wright-0.3.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  370. {rag_wright-0.2.1 → rag_wright-0.3.0/.claude/skills/qwen-vllm-modal}/scripts/modal_qwen3_vllm_server.py +0 -0
  371. {rag_wright-0.2.1 → rag_wright-0.3.0}/.env.example +0 -0
  372. {rag_wright-0.2.1 → rag_wright-0.3.0}/.github/workflows/publish.yml +0 -0
  373. {rag_wright-0.2.1 → rag_wright-0.3.0}/.github/workflows/release-please.yml +0 -0
  374. {rag_wright-0.2.1 → rag_wright-0.3.0}/.gitignore +0 -0
  375. {rag_wright-0.2.1 → rag_wright-0.3.0}/LICENSE +0 -0
  376. {rag_wright-0.2.1 → rag_wright-0.3.0}/SPEC.md +0 -0
  377. {rag_wright-0.2.1 → rag_wright-0.3.0}/conftest.py +0 -0
  378. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/ArcadeDB_Local.md +0 -0
  379. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/OBSERVABILITY.md +0 -0
  380. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  381. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  382. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  383. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  384. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0005-relational-golden-set.md +0 -0
  385. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0006-model-profile.md +0 -0
  386. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  387. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  388. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  389. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  390. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  391. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  392. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  393. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  394. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  395. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  396. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  397. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  398. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  399. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  400. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  401. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  402. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  403. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  404. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  405. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  406. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  407. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  408. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  409. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  410. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  411. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  412. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  413. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  414. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  415. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  416. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  417. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  418. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  419. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  420. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  421. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  422. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  423. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  424. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  425. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  426. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  427. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  428. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  429. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  430. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  431. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  432. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  433. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  434. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  435. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  436. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  437. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  438. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  439. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  440. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  441. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  442. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  443. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  444. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  445. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  446. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  447. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  448. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  449. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  450. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  451. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  452. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  453. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  454. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  455. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  456. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  457. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  458. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  459. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  460. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  461. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  462. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  463. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  464. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  465. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  466. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  467. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  468. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  469. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  470. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  471. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  472. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  473. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  474. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0095-span-page-provenance.md +0 -0
  475. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  476. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  477. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  478. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  479. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  480. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  481. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  482. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  483. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  484. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  485. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  486. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  487. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  488. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  489. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  490. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  491. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  492. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  493. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  494. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  495. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  496. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  497. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  498. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  499. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  500. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  501. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  502. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  503. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  504. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/README.md +0 -0
  505. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  506. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  507. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  508. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  509. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  510. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  511. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  512. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  513. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  514. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  515. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  516. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  517. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  518. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  519. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  520. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  521. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  522. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  523. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  524. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  525. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  526. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  527. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  528. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  529. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  530. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  531. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  532. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  533. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  534. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  535. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  536. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  537. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  538. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  539. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  540. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  541. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  542. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  543. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  544. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  545. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  546. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  547. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  548. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  549. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  550. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  551. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  552. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  553. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  554. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  555. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  556. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  557. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  558. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  559. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  560. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  561. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  562. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  563. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  564. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  565. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  566. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/misc/.gitkeep +0 -0
  567. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  568. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/async-migration.md +0 -0
  569. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/demo_plan.md +0 -0
  570. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  571. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  572. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  573. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  574. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  575. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  576. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/contract_pipeline_explainer.md +0 -0
  577. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/corpus_ingest_recipe.md +0 -0
  578. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/domain-adaptation/README.md +0 -0
  579. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  580. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/classifier_model_ab.md +0 -0
  581. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/compliance_demo.md +0 -0
  582. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/compliance_gate_cc7.md +0 -0
  583. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  584. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  585. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/dg_model_ab.md +0 -0
  586. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/function_gate_recall.md +0 -0
  587. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  588. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  589. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/ocr_benchmark.md +0 -0
  590. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/prod1_readiness.md +0 -0
  591. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/prod2_readiness.md +0 -0
  592. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/query_side_model_ab.md +0 -0
  593. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  594. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/silver_provider_routing.md +0 -0
  595. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  596. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/playbook.md +0 -0
  597. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/product/contracts_product_roadmap.md +0 -0
  598. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/product/engine-api-migration-handoff.md +0 -0
  599. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/product/engine_async_api.md +0 -0
  600. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/product/new-domain-build-sequence.md +0 -0
  601. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  602. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  603. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  604. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/proposals/ontology-induction.md +0 -0
  605. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/quickstart.md +0 -0
  606. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/releasing.md +0 -0
  607. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/engine-platform/SPEC.md +0 -0
  608. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/engine-platform/TASKS.md +0 -0
  609. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/engine-prep/plan.md +0 -0
  610. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  611. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  612. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  613. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/templates/product-starter/dependabot.yml +0 -0
  614. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  615. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  616. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  617. {rag_wright-0.2.1 → rag_wright-0.3.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  618. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/__init__.py +0 -0
  619. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/acord.py +0 -0
  620. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/acord_retrieval.py +0 -0
  621. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/boundary_residue_gold.py +0 -0
  622. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/build_golden.py +0 -0
  623. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  624. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  625. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  626. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  627. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/condensed_pipeline.py +0 -0
  628. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/contract_parity_live.py +0 -0
  629. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/contractnli_judge.py +0 -0
  630. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/cuad_highlight.py +0 -0
  631. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/embedded_eval.py +0 -0
  632. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/full_pipeline_rerank.py +0 -0
  633. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/function_ceiling.py +0 -0
  634. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/function_property_rerank.py +0 -0
  635. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/function_rerank.py +0 -0
  636. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/gate1_chunker_ab.py +0 -0
  637. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/gate2_hybrid_rerank.py +0 -0
  638. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/golden/relational/set.json +0 -0
  639. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/golden.py +0 -0
  640. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/ground_discriminator_rerank.py +0 -0
  641. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/harness.py +0 -0
  642. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/ingestion_live_smoke.py +0 -0
  643. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/kg_property_rerank.py +0 -0
  644. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/listwise_rerank.py +0 -0
  645. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/multihop.py +0 -0
  646. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/nl_to_type.py +0 -0
  647. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/relational_eval.py +0 -0
  648. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/residual_decision_gold.py +0 -0
  649. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/segmenter_eval.py +0 -0
  650. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/semantic_judge_gold.py +0 -0
  651. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/test_acord.py +0 -0
  652. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/test_acord_retrieval.py +0 -0
  653. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/test_harness.py +0 -0
  654. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/test_multihop_set.py +0 -0
  655. {rag_wright-0.2.1 → rag_wright-0.3.0}/eval/unit_grouper_eval.py +0 -0
  656. {rag_wright-0.2.1 → rag_wright-0.3.0}/examples/quickstart.py +0 -0
  657. {rag_wright-0.2.1 → rag_wright-0.3.0}/plan.md +0 -0
  658. {rag_wright-0.2.1 → rag_wright-0.3.0}/release-please-config.json +0 -0
  659. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ab_model_overlap.py +0 -0
  660. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acord_unify.py +0 -0
  661. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acquire_acord.py +0 -0
  662. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acquire_ecfr.py +0 -0
  663. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acquire_edgar.py +0 -0
  664. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acquire_ftc_255.py +0 -0
  665. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/acquire_prod1_corpus.py +0 -0
  666. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/audit_reclass_flips.py +0 -0
  667. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/author_leg_a_silver_key.py +0 -0
  668. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/backfill_clause_span_id.py +0 -0
  669. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  670. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/backup_kg_to_gcs.sh +0 -0
  671. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/bootstrap_template_capture.py +0 -0
  672. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/bootstrap_typed_edges.py +0 -0
  673. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/build_api_docs.sh +0 -0
  674. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/build_cuad_clause_cache.py +0 -0
  675. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/build_function_routing_map.py +0 -0
  676. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_assemble_v2.py +0 -0
  677. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_assemble_v3.py +0 -0
  678. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  679. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_generate_hard_positives.py +0 -0
  680. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_generate_training.py +0 -0
  681. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_hybrid.py +0 -0
  682. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_hybrid2.py +0 -0
  683. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_jev_actor.py +0 -0
  684. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_jev_claimtypes.py +0 -0
  685. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_jev_operative.py +0 -0
  686. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_label_spans.py +0 -0
  687. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_laya_prep.py +0 -0
  688. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_laya_train.py +0 -0
  689. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_prep_operative.py +0 -0
  690. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_relabel_rubric.py +0 -0
  691. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_relabel_rubric2.py +0 -0
  692. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/cic1_train_operative.py +0 -0
  693. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/compare_extraction_models.py +0 -0
  694. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  695. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/compliance_engine_smoke.py +0 -0
  696. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/compliance_policy_demo.py +0 -0
  697. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/curate_taxonomy_gaps.py +0 -0
  698. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/dg_model_ab.py +0 -0
  699. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  700. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  701. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  702. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_legs.py +0 -0
  703. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_pool.py +0 -0
  704. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_relstructure.py +0 -0
  705. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/diagnose_acord_retrieval.py +0 -0
  706. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/eval_all.py +0 -0
  707. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/eval_ce.py +0 -0
  708. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/eval_listwise_b.py +0 -0
  709. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/export_ce_dataset.py +0 -0
  710. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/extract_features.py +0 -0
  711. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/listwise_variants.py +0 -0
  712. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/relational_features.py +0 -0
  713. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/train_ce.py +0 -0
  714. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/distill/train_modal.py +0 -0
  715. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/enrich_edgar_candidates.py +0 -0
  716. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/eval_chunking_ab.py +0 -0
  717. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  718. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/eval_compliance_gold.py +0 -0
  719. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/extract_arcadedb_docs.py +0 -0
  720. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/generate_contract_python.py +0 -0
  721. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/git_post_commit_graphify.sh +0 -0
  722. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/granite_chunker_assess.py +0 -0
  723. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/graph_status.sh +0 -0
  724. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_acord.py +0 -0
  725. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  726. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  727. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_compliance_prod2.py +0 -0
  728. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_cuad.py +0 -0
  729. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_cuad_full.py +0 -0
  730. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_ftc_compliance.py +0 -0
  731. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_prod1.py +0 -0
  732. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_prod1_async.py +0 -0
  733. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ingest_smoke.py +0 -0
  734. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/install_git_hooks.sh +0 -0
  735. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/label_new_functions.py +0 -0
  736. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/legb_function_gate_recall.py +0 -0
  737. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/make_compliance_fixtures.py +0 -0
  738. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/make_compliance_gold.py +0 -0
  739. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  740. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  741. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  742. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/measure_generation_robustness.py +0 -0
  743. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/measure_silver.py +0 -0
  744. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/merge_docs_into_framework.py +0 -0
  745. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  746. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  747. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  748. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/migrate_span_fields.py +0 -0
  749. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/mine_scarce_functions.py +0 -0
  750. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_arcadedb.py +0 -0
  751. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_backfill.py +0 -0
  752. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_exception_linking.py +0 -0
  753. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_gemma4_vllm.py +0 -0
  754. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  755. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_granite_server.py +0 -0
  756. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_granite_throughput.py +0 -0
  757. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_granite_vllm_server.py +0 -0
  758. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_query_app.py +0 -0
  759. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  760. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  761. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/modal_stack_a100.py +0 -0
  762. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ocr_benchmark.py +0 -0
  763. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ocr_preprocess.py +0 -0
  764. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/ontology_dimension_check.py +0 -0
  765. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/phase_a_leg_validate.py +0 -0
  766. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/populate_clause_kg.py +0 -0
  767. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/populate_entity_graph.py +0 -0
  768. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/populate_entity_graph_extracted.py +0 -0
  769. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/populate_property_store.py +0 -0
  770. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/publish_manifests.py +0 -0
  771. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/reclassify_kg.py +0 -0
  772. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/refresh_framework_graph.sh +0 -0
  773. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/revert_reclass_flips.py +0 -0
  774. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/run_acord_retrieval.py +0 -0
  775. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/run_clause_exception_linking.py +0 -0
  776. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/semantic_judge_live_validate.py +0 -0
  777. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/semantic_judge_probe.py +0 -0
  778. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/snapshot_leg_a_eval.py +0 -0
  779. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/table_retrieval_smoke.py +0 -0
  780. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/train_function_classifier.py +0 -0
  781. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/train_legalbert_function.py +0 -0
  782. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/train_legalbert_modal.py +0 -0
  783. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/typed_rerank_validate.py +0 -0
  784. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/verify_wheel_install.sh +0 -0
  785. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/vllm_extraction_ab.py +0 -0
  786. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/vllm_kg_query_validate.py +0 -0
  787. {rag_wright-0.2.1 → rag_wright-0.3.0}/scripts/vllm_raw_diagnostic.py +0 -0
  788. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/__init__.py +0 -0
  789. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/api/ids.py +0 -0
  790. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/api/invoke.py +0 -0
  791. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/api/mcp.py +0 -0
  792. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/__init__.py +0 -0
  793. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/ard.py +0 -0
  794. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  795. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  796. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  797. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/embedding.py +0 -0
  798. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  799. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/fusion.py +0 -0
  800. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  801. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  802. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  803. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/invoke.py +0 -0
  804. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  805. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/parsing.py +0 -0
  806. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/registry.py +0 -0
  807. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/reranking.py +0 -0
  808. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  809. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  810. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  811. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  812. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/contracts/__init__.py +0 -0
  813. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/contracts/chunk.py +0 -0
  814. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/contracts/graph.py +0 -0
  815. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/contracts/identifiers.py +0 -0
  816. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/contracts/provenance.py +0 -0
  817. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/corpus/__init__.py +0 -0
  818. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/corpus/embedded.py +0 -0
  819. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/corpus/http.py +0 -0
  820. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ingestion/__init__.py +0 -0
  821. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ingestion/layout.py +0 -0
  822. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ingestion/segment.py +0 -0
  823. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ingestion/tables.py +0 -0
  824. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/models/__init__.py +0 -0
  825. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/models/tracing.py +0 -0
  826. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/models/usage.py +0 -0
  827. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ontology/__init__.py +0 -0
  828. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  829. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/ontology/registry.py +0 -0
  830. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/__init__.py +0 -0
  831. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  832. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  833. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  834. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  835. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  836. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  837. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  838. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  839. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  840. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  841. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  842. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  843. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  844. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  845. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  846. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  847. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  848. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  849. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  850. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  851. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  852. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  853. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  854. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  855. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  856. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  857. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  858. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  859. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  860. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  861. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  862. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  863. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  864. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  865. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/options.py +0 -0
  866. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  867. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  868. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  869. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  870. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  871. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  872. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  873. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  874. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  875. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  876. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  877. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  878. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  879. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  880. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  881. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  882. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  883. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  884. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  885. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/py.typed +0 -0
  886. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/__init__.py +0 -0
  887. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  888. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  889. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  890. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  891. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  892. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/spans/__init__.py +0 -0
  893. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/spans/page_map.py +0 -0
  894. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/store/__init__.py +0 -0
  895. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/store/chunk_text.py +0 -0
  896. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  897. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  898. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/subgraphs/observability.py +0 -0
  899. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  900. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/util/__init__.py +0 -0
  901. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/util/concurrent.py +0 -0
  902. {rag_wright-0.2.1 → rag_wright-0.3.0}/src/rag_wright/util/spacy_model.py +0 -0
  903. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/__init__.py +0 -0
  904. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/__init__.py +0 -0
  905. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_capability_reexports.py +0 -0
  906. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_discover.py +0 -0
  907. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_documents.py +0 -0
  908. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_e2e.py +0 -0
  909. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_options.py +0 -0
  910. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_usage.py +0 -0
  911. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/api/test_workspace.py +0 -0
  912. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/arch/test_doc_references.py +0 -0
  913. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/async_helpers.py +0 -0
  914. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/__init__.py +0 -0
  915. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  916. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_answer_generator.py +0 -0
  917. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  918. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  919. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_chunk_read.py +0 -0
  920. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_chunk_write.py +0 -0
  921. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_claim_extraction.py +0 -0
  922. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  923. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  924. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_compliance_store.py +0 -0
  925. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  926. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  927. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_dg_adapter.py +0 -0
  928. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_dg_async.py +0 -0
  929. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_dg_extraction.py +0 -0
  930. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  931. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_dg_private.py +0 -0
  932. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_document_scope.py +0 -0
  933. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_embedding.py +0 -0
  934. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  935. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_entity_resolution.py +0 -0
  936. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_fusion.py +0 -0
  937. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_graph_query.py +0 -0
  938. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_graph_storage.py +0 -0
  939. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_highlight_serve.py +0 -0
  940. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_hybrid_search.py +0 -0
  941. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_jev_decision.py +0 -0
  942. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_manifest_validation.py +0 -0
  943. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_manifests.py +0 -0
  944. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_parsing.py +0 -0
  945. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_parties_extraction.py +0 -0
  946. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  947. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  948. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_query_understanding.py +0 -0
  949. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_registry.py +0 -0
  950. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_remote_encoders.py +0 -0
  951. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_repair_partition.py +0 -0
  952. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_reranking.py +0 -0
  953. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_retrieval_core.py +0 -0
  954. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  955. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  956. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_rlm_method.py +0 -0
  957. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  958. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_scan_quality.py +0 -0
  959. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  960. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  961. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  962. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  963. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/compliance_fakes.py +0 -0
  964. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/conftest.py +0 -0
  965. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/__init__.py +0 -0
  966. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  967. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_chunk_record.py +0 -0
  968. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_compliance.py +0 -0
  969. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  970. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_extraction.py +0 -0
  971. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_function.py +0 -0
  972. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_function_routing.py +0 -0
  973. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_identifiers.py +0 -0
  974. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  975. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_jurisdiction.py +0 -0
  976. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_ontology.py +0 -0
  977. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_property.py +0 -0
  978. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_provenance.py +0 -0
  979. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/contracts/test_value_match.py +0 -0
  980. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/__init__.py +0 -0
  981. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  982. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_cuad.py +0 -0
  983. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  984. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_document_parser.py +0 -0
  985. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_edgar.py +0 -0
  986. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_embedded.py +0 -0
  987. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  988. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_http.py +0 -0
  989. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_parse_wire2.py +0 -0
  990. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/corpus/test_selection.py +0 -0
  991. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/eval/test_contractnli_judge.py +0 -0
  992. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  993. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/eval/test_kg_property_rerank.py +0 -0
  994. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  995. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/eval/test_relational_eval.py +0 -0
  996. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  997. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  998. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  999. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  1000. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  1001. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  1002. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/foundation/__init__.py +0 -0
  1003. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  1004. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/foundation/test_model_seam_structured.py +0 -0
  1005. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/__init__.py +0 -0
  1006. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_builder.py +0 -0
  1007. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_evaluate.py +0 -0
  1008. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  1009. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  1010. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_table_rows.py +0 -0
  1011. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_tuning.py +0 -0
  1012. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ingestion/test_unit_grouper.py +0 -0
  1013. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/journey/incidents_domain.py +0 -0
  1014. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/journey/incidents_pack.ttl +0 -0
  1015. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/journey/test_incidents_journey.py +0 -0
  1016. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/journey/test_pack_schema.py +0 -0
  1017. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/__init__.py +0 -0
  1018. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/test_compliance_server.py +0 -0
  1019. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  1020. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  1021. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/test_relational_qa_server.py +0 -0
  1022. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  1023. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/__init__.py +0 -0
  1024. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_async_infra.py +0 -0
  1025. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_profile_routing.py +0 -0
  1026. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_seam_async.py +0 -0
  1027. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_seam_retry.py +0 -0
  1028. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_seam_stream.py +0 -0
  1029. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_serving_seam.py +0 -0
  1030. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_tag_structured.py +0 -0
  1031. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_tag_structured_async.py +0 -0
  1032. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_tracing.py +0 -0
  1033. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/models/test_usage.py +0 -0
  1034. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/__init__.py +0 -0
  1035. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_clause_template.py +0 -0
  1036. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  1037. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_derivation.py +0 -0
  1038. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  1039. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  1040. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  1041. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  1042. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  1043. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/reference/test_compliance_reference.py +0 -0
  1044. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/reference/test_contract_seam.py +0 -0
  1045. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  1046. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  1047. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/skills/__init__.py +0 -0
  1048. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  1049. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_boundary.py +0 -0
  1050. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  1051. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_clause_function_classifier.py +0 -0
  1052. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  1053. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  1054. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  1055. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_dim_classifier.py +0 -0
  1056. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_function_classifier.py +0 -0
  1057. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_hybrid_classifier.py +0 -0
  1058. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  1059. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_legalbert_classifier.py +0 -0
  1060. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_model_capabilities.py +0 -0
  1061. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_new_function_labels.py +0 -0
  1062. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_page_map.py +0 -0
  1063. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_property_extractor.py +0 -0
  1064. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_property_grounding.py +0 -0
  1065. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_reclassify.py +0 -0
  1066. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_residual_decision.py +0 -0
  1067. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_scarce_function_labels.py +0 -0
  1068. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_segment.py +0 -0
  1069. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_segmentation_vocab.py +0 -0
  1070. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_semantic_judge.py +0 -0
  1071. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_span_offsets.py +0 -0
  1072. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_stage_labels_0005.py +0 -0
  1073. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_symbolic_validation.py +0 -0
  1074. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  1075. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/__init__.py +0 -0
  1076. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_affiliation_backfill.py +0 -0
  1077. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_arcadedb_contract.py +0 -0
  1078. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_arcadedb_property.py +0 -0
  1079. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1080. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_arcadedb_span.py +0 -0
  1081. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_chunk_text.py +0 -0
  1082. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_concurrent_writes.py +0 -0
  1083. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_document_scope.py +0 -0
  1084. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_engine_domain_neutral.py +0 -0
  1085. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_entities_by_name.py +0 -0
  1086. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_kg_edges.py +0 -0
  1087. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_kg_read.py +0 -0
  1088. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_kg_write.py +0 -0
  1089. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_neutral_schema.py +0 -0
  1090. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/store/test_write_graph_idempotent.py +0 -0
  1091. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/__init__.py +0 -0
  1092. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  1093. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1094. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_clause_results.py +0 -0
  1095. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_compliance_check.py +0 -0
  1096. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1097. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1098. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  1099. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1100. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1101. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_observability.py +0 -0
  1102. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1103. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1104. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1105. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_scaffold.py +0 -0
  1106. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1107. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1108. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/test_backfill_clause_span_id.py +0 -0
  1109. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/test_dg_model_ab.py +0 -0
  1110. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/test_populate_clause_kg.py +0 -0
  1111. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/test_populate_entity_graph.py +0 -0
  1112. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/util/__init__.py +0 -0
  1113. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/util/test_concurrent.py +0 -0
  1114. {rag_wright-0.2.1 → rag_wright-0.3.0}/tests/util/test_spacy_model.py +0 -0
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: authoring-a-capability
3
+ description: >-
4
+ How to author a new RAG_Wright engine capability of any kind (subgraph, function, model, agent_skill, mcp_tool)
5
+ so it is registered, ARD-discoverable, and invokable by name through the engine API. Use it whenever you add a
6
+ new capability or a new-domain product/graph needs one: it gives the shared registration + ARD + invocation
7
+ contract (the four surfaces + the definition of done), the per-kind implementation specifics, and the
8
+ conformance guardrail that keeps the catalog honest. Grounded against the real code; keep it in step with it.
9
+ ---
10
+
11
+ # Authoring a capability
12
+
13
+ A **capability** is a named, ARD-registered unit of engine behavior (FR-C). Every capability has a `kind`
14
+ (`ard.py::EntryKind`): `subgraph | function | model | agent_skill | mcp_tool` (`dagster_asset` is reserved). The
15
+ contract below is the SAME for every kind; only the implementation differs. Capabilities compose — a subgraph calls
16
+ functions/models; a product invokes a capability by name through `rag_wright.api`.
17
+
18
+ **Ground every call before writing it** (CLAUDE.md library rule). The authoritative sources this skill summarizes:
19
+ `capabilities/registry.py` (the canonical-slug set, `register_canonical_slugs`, the internal
20
+ `CapabilityRegistry.register`), `capabilities/manifests.py` (`CapabilityManifest`; `_ENGINE_SPECS`, the engine's
21
+ 7 generic manifests returned by `engine_capabilities()`; `MANIFEST_SPECS`, the runtime catalog; `register_capability`,
22
+ `load_pack(module)`), the reference pack's manifests (`CONTRACT_SPECS` / `COMPLIANCE_SPECS` in `rag_wright.packs.{contracts,compliance}.pack`), `capabilities/ard.py` (`EntryKind`, `MEDIA_TYPE_BY_KIND`,
23
+ `CALLABLE_KINDS`), `scripts/publish_manifests.py`, `api/invoke.py` + `capabilities/invoke.py::capability_impl` (the adapter-free impl_ref invoker + drift guard),
24
+ `api/mcp.py` (generic MCP exposure). The guardrail test is `tests/capabilities/test_authoring_contract.py`.
25
+ Paths here are relative to `src/rag_wright/` unless they start with `scripts/` or `tests/`; all of them
26
+ are in the engine repository: read them there or on GitHub, at the tag matching your installed engine. A product imports the
27
+ authoring surface from `rag_wright.api`: `CapabilityManifest`, `register_capability`, `load_pack`,
28
+ `engine_capabilities`, `register_canonical_slugs`, `canonical_capability_slugs`, `load_reference_pack`,
29
+ `reference_pack` (the same objects as in `capabilities/manifests.py` and `capabilities/registry.py`).
30
+
31
+ ## The four surfaces (the definition of done)
32
+
33
+ A finished capability touches these: 1 (implementation) is for EVERY kind; 2 (the invoke factory + `impl_ref`) is
34
+ for invokable kinds (`subgraph`/`model`); 3 (manifest + register) is for every discoverable kind; 4 (invocable +
35
+ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is optional.
36
+
37
+ 1. **Implementation** — the real code, in that kind's home (see per-kind below).
38
+ 2. **The invoke factory + `impl_ref`** (invokable kinds: subgraph/model) — write a co-located
39
+ `async def ainvoke(resources, inputs)` (subgraph) / `def <name>(resources, inputs)` (model) in the capability's
40
+ own module. A subgraph factory builds over the opaque `WorkspaceHandle` (`resources._store`,
41
+ `resources._embedder`, `resources.model_id(role)`), never env; a model factory is store-independent and ignores
42
+ `resources`. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
43
+ it LAZILY and calls it — there is **NO central adapter dict** (EP-CORE-2). A plain function/agent_skill/mcp_tool
44
+ declares no `impl_ref`.
45
+ 3. **ARD manifest + register it** — a `CapabilityManifest(slug, kind, display_name, description,
46
+ representative_queries=(2-5…), tags=…, impl_ref=…)`. **The catalog ships EMPTY (EP-CORE-3):** call
47
+ `register_capability(manifest)` at runtime to add it (a product registers its own; the engine's reference pack is
48
+ opt-in via `load_reference_pack()`). `representative_queries` is the field ARD discovery ranks on — write real,
49
+ specific queries. For the ENGINE's reference pack, the manifest is committed in its pack's `pack.py` (`CONTRACT_SPECS` / `COMPLIANCE_SPECS`) and
50
+ the slug in its `*_CAPABILITY_SLUGS` (added to the registry by `register_canonical_slugs` when the pack loads);
51
+ a GENERIC engine capability's manifest is in `manifests.py::_ENGINE_SPECS` and its slug in
52
+ `registry.ENGINE_CAPABILITY_SLUGS`. Engine capabilities (`jev_decision`, `generation`, ...) are NOT in the
53
+ catalog until registered too: register them from `engine_capabilities()` when your pack uses them.
54
+ **Packs:** a pack is a module exposing `register()`, which calls `register_canonical_slugs(...)` for its slugs and
55
+ then `register_capability(m)` per manifest (plus any engine capabilities it builds on); load it with
56
+ `load_pack("<module>")`. `load_reference_pack()` is just `load_pack("rag_wright.packs.compliance.pack")` (compliance registers contracts first).
57
+ A downstream product can register without touching the canonical set (`register_capability` does not check
58
+ slugs), BUT `manifests.author()` rejects a non-canonical slug, so a product that publishes ARD JSON must call
59
+ `register_canonical_slugs` for its slugs first.
60
+ Publish to `~/.air/registry` with `uv run python scripts/publish_manifests.py`; that script publishes only the
61
+ engine's reference pack (it calls `load_reference_pack()`), so a product publishes its own with `publish_all`.
62
+ Callable kinds get `ResponseBounds` (defaulted); `agent_skill` must NOT declare bounds (loaded, not called).
63
+ 4. **Invocable + MCP for free** — once registered with an `impl_ref`, the capability is callable as
64
+ `ainvoke_subgraph(slug, inputs, resources=ws)` / `invoke_model(slug, inputs, resources=ws)` (or
65
+ `ainvoke_model(...)`, all on `rag_wright.api`). The invoker first checks the slug is in the catalog with the
66
+ kind that invoker serves (`KeyError` / `ValueError` otherwise), then imports the `impl_ref` via
67
+ `capabilities.invoke.capability_impl` — AND exposable over MCP (surface 4b), with **zero engine edits**.
68
+
69
+ 4b. **MCP exposure** (optional) — any invokable capability is already an MCP tool with zero extra code via
70
+ `api/mcp.py::build_capability_mcp(slug, resources=ws)` (EP-RT-2). Write a bespoke FastMCP server only
71
+ when you want a CURATED, typed tool signature instead of the generic opaque-`inputs` surface.
72
+
73
+ ## Per-kind specifics
74
+
75
+ ### subgraph — a compiled LangGraph `StateGraph`
76
+ - **Home:** a generic engine subgraph in `subgraphs/<slug>.py`; a domain subgraph in its pack, `packs/<pack>/subgraphs/<slug>.py`
77
+ (the reference pack: `packs/contracts/subgraphs/typed_property_retrieval.py`). A `production_<slug>(*, store, ...) -> CompiledGraph` builder: `g = StateGraph(_State)`,
78
+ add nodes/edges with `START`/`END`, `return g.compile()`. Nodes call functions/models (compose).
79
+ - **Invoke:** the co-located `async def ainvoke(resources, inputs)` factory (impl_ref target) builds + awaits the graph.
80
+ - Retry/dead-letter come from the graph scaffold, not the invoker. `CapabilityManifest` has no contract field (only
81
+ the internal `CapabilityRegistry.register(contract=...)` takes one); where the typed I/O must be declared, set
82
+ `capability_interface` on the manifest.
83
+
84
+ ### function — a plain, typed callable
85
+ - **Home:** `capabilities/<slug>.py` (generic) or `packs/<pack>/capabilities/<slug>.py` (domain). A deterministic or model-backed callable with a Pydantic in/out contract.
86
+ - Invoker adapters for `function` are not wired yet (EP-API-2c); until then functions are composed inside
87
+ subgraphs, not invoked standalone through the API. Still register + manifest it.
88
+
89
+ ### model — a trained checkpoint behind a seam
90
+ - **Home:** a GENERIC engine model capability lives in `capabilities/` (e.g. `capabilities/jev_decision.py`); a
91
+ domain model (e.g. the reference pack's SetFit clause classifier and 29-dim property fleet) lives with its pack,
92
+ in the reference pack (`rag_wright.packs.contracts.spans.model_capabilities`) for the engine's worked example, or in
93
+ your product repo. Load the checkpoint ONCE and cache it (the fleet is heavy).
94
+ - Serve behind the existing seam/adapter so nothing upstream changes (to FIND where a model cap belongs, use the
95
+ `classifier-opportunity-analysis` skill; to BUILD/train + checkpoint + serve it, the `setfit` skill). The impl_ref
96
+ factory is `def <slug>(resources, inputs)` for a SYNC impl (CPU-bound local inference — a classifier/XGBoost
97
+ checkpoint; `resources` ignored) or `async def <slug>(resources, inputs)` for an ASYNC impl (I/O-bound — an
98
+ LLM-backed model cap calling OpenRouter / a local vLLM client). `invoke_model` runs a sync impl and REFUSES an
99
+ async one; `ainvoke_model` (EP-API-7) off-loads a sync impl with `asyncio.to_thread` and awaits an async impl
100
+ directly, with an optional `sem` for fan-out backpressure.
101
+
102
+ ### agent_skill — authored SKILL.md + the Deep Agents runtime
103
+ - **Home:** `skills/<slug>/SKILL.md` (generic) or `packs/<pack>/skills/<slug>/SKILL.md` (domain, e.g.
104
+ `packs/compliance/skills/compliance_judgment/SKILL.md`) + the agent runtime (e.g. `skills/rlm/`). It is LOADED (progressive
105
+ disclosure), not called: no `ResponseBounds`. Declare `requires=(...)` for a closure over other skills and
106
+ `skill_runtime` for its intrinsic runtime.
107
+
108
+ ### mcp_tool — a capability exposed over MCP
109
+ - A distinct ARD identity (`<slug>_mcp`) for the same underlying capability exposed as a cross-agent MCP tool.
110
+ Prefer the generic `build_capability_mcp` (surface 4b); author a bespoke server only for a curated typed
111
+ signature (the reference pack's are in `packs/contracts/mcp/` and `packs/compliance/mcp/`, e.g.
112
+ `packs/compliance/mcp/compliance_server.py`). Bind the store server-side (issue 0035) — the tool never takes a tenant/store argument.
113
+
114
+ ## Verify (the guardrail)
115
+
116
+ **In a product**, the engine's guardrail tests are not yours to run; write the equivalent for your own pack: load
117
+ it with `load_pack("<your pack module>")` in a test, then for each of your manifests assert the slug is in
118
+ `capability_index()` with the kind you declared, and resolve and call its `impl_ref` (`capability_impl(slug)`, from
119
+ `rag_wright.pack_sdk`) with a small input. The rest of this section is the engine's own guardrail.
120
+
121
+ **In the engine repo**, run `uv run pytest tests/capabilities/test_authoring_contract.py tests/capabilities/test_manifests.py
122
+ tests/capabilities/test_registry.py tests/arch/test_import_contracts.py` after authoring. It pins the contract this
123
+ skill teaches: no manifest under a non-canonical slug; the reserved-without-manifest set is a fixed allowlist (so
124
+ adding a slug but forgetting its manifest FAILS here); every manifest kind is a real ARD kind; every cap that declares
125
+ an `impl_ref` is a canonical slug with a manifest of the matching kind. The guardrail does not import the
126
+ `impl_ref` itself: add a test of your own that resolves it with `capability_impl(slug)` and calls it (the reference
127
+ pack's is `tests/spans/test_model_capabilities.py`). If you deliberately add a reserved/internal slug (no manifest),
128
+ add it to `_RESERVED_WITHOUT_MANIFEST` with a one-line reason. The engine's `tests/conftest.py` loads the reference
129
+ pack, so these tests see its slugs.
130
+
131
+ **The import boundary (engine repo).** `pyproject.toml` `[tool.importlinter]` has three forbidden contracts: every
132
+ generic engine package (`source_modules`: `rag_wright.api`, `capabilities`, `contracts`, `corpus`, `ingestion`,
133
+ `models`, `ontology`, `pack_sdk`, `skills`, `spans`, `store`, `subgraphs`, `util`) must never import
134
+ `rag_wright.packs`; pack code (`rag_wright.packs`) imports only `rag_wright.api` and `rag_wright.pack_sdk` (plus
135
+ itself), never another engine package directly; and `rag_wright.packs.contracts` must never import
136
+ `rag_wright.packs.compliance`. A pack capability's code therefore takes its building blocks from those two tiers. A new generic top-level package
137
+ goes in the first contract's `source_modules`; a new module inside an existing package or inside `rag_wright.packs`
138
+ needs no edit. `tests/arch/test_import_contracts.py` enforces all three.
139
+
140
+ **The network guard.** `tests/conftest.py` fails any test that resolves a non-local host unless it carries a live
141
+ marker (`model`, `store`, `parse`, `embed`, `rerank`, `ner`, `fleet`). Mock model and HTTP calls in unit tests, or
142
+ mark the test live.
143
+
144
+ ## Common mistakes
145
+
146
+ - Adding the slug but forgetting the manifest (slug becomes silently un-discoverable) — the guardrail catches it.
147
+ - An impl_ref factory that reaches env/globals instead of the `WorkspaceHandle` — breaks multi-workspace use; build
148
+ everything from `resources`.
149
+ - A heavy import at the top of an impl_ref factory module that something light imports (a pack's `register()`
150
+ module, `rag_wright.api`): it inflates the light index; import inside the factory body.
151
+ - Declaring `response_bounds` on an `agent_skill` (constructing that `CapabilityManifest` raises `ValueError`: the
152
+ bounds apply only to callable kinds, and a skill is loaded, not called).
153
+ - Inventing a kind. If a capability fits none of the five, flag it — do not force-fit.
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: building-an-ingestion-capability
3
+ description: >-
4
+ How to build a NEW domain's ingestion on the RAG_Wright engine with `build_ingestion`: decide what one extraction
5
+ UNIT is in your documents, write the one required hook (the extractor) and only the optional hooks you need,
6
+ declare the record types in your pack `.ttl`, tune the default hooks with `evaluate_ingestion` on your own sample
7
+ documents, and handle spreadsheets, tables and embedded files. Use it when a product or domain pack needs to turn
8
+ its documents into a cited knowledge graph, or when an ingestion result looks wrong (units too big, tables split,
9
+ records uncited). Grounded in ADR-0124 and the generated API reference (`docs/api/`).
10
+ ---
11
+
12
+ # Building an ingestion capability
13
+
14
+ The engine owns the ingestion MECHANISM; a domain supplies one function, the extractor, plus any optional hook whose
15
+ default does not fit. Everything named here is imported from `rag_wright.api` (the generated `docs/api/README.md` has
16
+ every signature). The decision record is ADR-0124 (`docs/adr/0124-generic-ingestion-builder-and-hooks.md`).
17
+ 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.
18
+
19
+ ## 1. Who owns which stage
20
+
21
+ | stage | owner | default (engine) | override with |
22
+ |---|---|---|---|
23
+ | parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown; embedded files) | engine | docling, content-hash cached | (none) |
24
+ | chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
25
+ | segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
26
+ | tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
27
+ | index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
28
+ | group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
29
+ | choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
30
+ | extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
31
+ | write records | engine default | `kg_write` | `writer=` |
32
+ | per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
33
+ | `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
34
+
35
+ Every hook's output is checked by the engine, default or override alike: `check_tiling` (spans tile the chunk text,
36
+ ids `<chunk_id>#<index>`), `check_units` (known spans, each once, in order), `check_extraction` (provenance, below).
37
+ A unit whose extraction fails is recorded in the report and skipped; a document that fails is dead-lettered; the run
38
+ goes on.
39
+
40
+ ## 2. Decide what ONE unit is (before writing code)
41
+
42
+ The unit is the text one extractor call reads. Get it right first; every other choice follows.
43
+
44
+ - Ask: "one record in my domain comes from ... ?" A section under a heading (a report, a policy) -> the default
45
+ grouper already does this. One table row (a register, a test log) -> the default treats a DATABASE-style table
46
+ (named, distinct header columns plus a serial first column or many columns) as one unit per row, and sets
47
+ `Unit.table_row` with exact cell values; force it per document with `IngestSource(table_mode="record")`, or keep
48
+ tables whole with `"block"`. A form (fields of ONE record) -> one unit (`auto` keeps a form grid whole).
49
+ - Units are capped at `IngestionTuning.max_unit_chars` (default 6000); a split table repeats its header row in each
50
+ continuation unit.
51
+ - A source is a file path or uploaded bytes: `IngestSource(path=...)`, or `IngestSource(data=..., name=...)` (the
52
+ name's extension picks the format), so an upload from object storage needs no temp file.
53
+ - If your documents mark units in a way layout does not show (a numbering scheme, a domain heading convention),
54
+ override `unit_grouper=` or pass a `boundary_decider=` (candidate line texts -> "starts a new unit?" per text) to
55
+ settle the lines the default grouper is unsure of. Domain conventions belong in your pack, never in the engine.
56
+ - **Decide which span REPRESENTS a unit** (`unit_representative=`, a `UnitRepresentative`: the unit's member spans,
57
+ with their tags -> the one that represents it). The chosen span becomes `unit.anchor` (the citation your records
58
+ carry, `span_id = unit.anchor.span_id`) and its primary tag leads `unit.tags` (the label your extractor reads).
59
+ Without it a unit is represented by its first member, which is usually its heading: the weakest text to tag and a
60
+ poor citation. The reference contracts pack passes `provision_vote` (ADR-0126): the label with the highest
61
+ probability summed over the non-heading members, cited by the member most confident in it; on 510 CUAD contracts
62
+ that beat heading-first by about 10 points. Measure your own rule on a gold set of your documents before choosing
63
+ it (the creating-evals skill).
64
+
65
+ ## 3. Declare your record types in the pack `.ttl`
66
+
67
+ The store creates only the types a pack declares (ADR-0066: schema lives in the ontology, not in code). A record type
68
+ needs `span_id` and `confidence` properties to carry provenance:
69
+
70
+ ```turtle
71
+ @prefix eng: <https://ragwright.local/ontology/engine#> .
72
+ @prefix my: <https://example.org/my-domain#> .
73
+
74
+ my:SectionNode a eng:KgVertexType ; eng:vertexName "Section" ;
75
+ eng:kgProperty "section_id:STRING", "title:STRING", "span_id:STRING", "confidence:STRING" ;
76
+ eng:uniqueIndexOn "section_id" .
77
+ ```
78
+
79
+ Point the workspace at it with `EngineConfig(pack="<path to your .ttl>")`; `open_workspace` then creates these types
80
+ on top of the neutral engine types. Writing a type the pack does not declare fails.
81
+
82
+ ## 4. Write the extractor, tune, ingest
83
+
84
+ The extractor turns one `Unit` into a `UnitExtraction` of `KgNode` / `KgEdge` records. Provenance rule
85
+ (`check_extraction`): a fact node or edge carries `span_id` (a span of THIS unit, e.g. `unit.anchor.span_id`) and
86
+ `confidence` (`EXTRACTED`, `INFERRED` or `AMBIGUOUS`); nodes without `span_id` are shared vocabulary; a non-empty
87
+ extraction must cite at least once. Run `evaluate_ingestion` on your OWN sample documents before trusting the
88
+ defaults; it needs no store and makes no model calls.
89
+
90
+ ```python
91
+ import asyncio
92
+ import os
93
+
94
+ from rag_wright.api import (
95
+ EngineConfig, IngestionTuning, IngestSource, KgNode, StoreConfig, UnitExtraction, build_ingestion,
96
+ evaluate_ingestion, open_workspace,
97
+ )
98
+
99
+ PACK_TTL = "my_domain/pack.ttl"
100
+ SAMPLES = ["samples/report.pdf"]
101
+ CORPUS = "my_domain"
102
+ CACHE = "data/cache/my_domain"
103
+
104
+
105
+ async def extract(unit, *, source_doc_id):
106
+ """One unit -> its records, each citing a span of the unit."""
107
+ title = unit.text.strip().splitlines()[0][:200]
108
+ return UnitExtraction(nodes=[KgNode("Section", "section_id", {
109
+ "section_id": f"{source_doc_id}:{unit.index}", "title": title,
110
+ "span_id": unit.anchor.span_id, "confidence": "EXTRACTED"})])
111
+
112
+
113
+ tuning = IngestionTuning(max_unit_chars=6000)
114
+ evaluation = evaluate_ingestion(SAMPLES, cache_dir=CACHE, tuning=tuning)
115
+ print("evaluation passed:", evaluation.passed, evaluation.failures)
116
+
117
+ ws = open_workspace(EngineConfig(store=StoreConfig(
118
+ host=os.environ["ARCADEDB_HOST"], port=os.environ["ARCADEDB_PORT"],
119
+ user=os.environ["ARCADEDB_USER"], password=os.environ["ARCADEDB_PASSWORD"]), pack=PACK_TTL), corpus=CORPUS)
120
+ pipeline = build_ingestion(extract, tuning=tuning)
121
+ report = asyncio.run(pipeline.aingest(ws, [IngestSource(path=p) for p in SAMPLES], cache_dir=CACHE))
122
+ print(report.succeeded, "ingested,", report.failed, "dead-lettered")
123
+ for doc in report.documents:
124
+ print(doc.doc_id, doc.units, "units,", doc.records, "records,", doc.extraction_failures)
125
+ ```
126
+
127
+ Iterate on `evaluation.failures` (and the `DocumentEvaluation` measures: `tables_whole`, `headings_start_units`,
128
+ `coverage`, `cap_ok`, ...) by changing `IngestionTuning` before you override a hook. Keep `extract` async and
129
+ network-bound work inside it; the engine runs up to `IngestionTuning.extract_concurrency` units at once.
130
+
131
+ ## 5. Spreadsheets, tables and embedded files
132
+
133
+ - **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
134
+ `DocumentReport.skipped_hidden_sheets`).
135
+ - **Exact cell values**: `table_rows(parse_document(...))` returns every data row as a `TableRow` (`columns`,
136
+ `values`, `cell(name)`), read from the parse's cell grid, whole even when chunking split the table. A per-row unit
137
+ carries its row in `Unit.table_row`, so the extractor reads cells, not re-parsed text.
138
+ - **Embedded files and PDF attachments** (an Office package's embedded workbook or PDF, a PDF's attached files) are
139
+ ingested as CHILD documents through the same pipeline: each gets its own `Document` node and an `EmbeddedIn` edge
140
+ to its parent, and an `AttachedTo` edge from the child to the table-row span it belongs to, with a confidence and
141
+ the identifier evidence (`IngestionTuning.identifier` sets what counts as an identifier). The report lists them in
142
+ `DocumentReport.children`, `links` and `unmapped_links`.
143
+
144
+ ## 6. Verify (definition of done)
145
+
146
+ 1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one).
147
+ 2. A live ingest of that sample: no dead letters, `extraction_failures` explained, records cite spans
148
+ (`kg_read(ws, "<your type>", fields=["span_id"])`), and `span_positions(ws, doc_id)` gives the citation positions.
149
+ 3. A hermetic test of your extractor on fixed units (no model calls in the default suite; the engine's test network
150
+ guard fails any unmarked test that reaches the network).
151
+ 4. If the extractor calls a model, meter it: run the ingest inside `measure_usage()` and check the call count and
152
+ cost per document before a bulk run.
153
+
154
+ ## Anti-patterns
155
+
156
+ - Putting domain rules (section words, abbreviations, value lists) in Python: they belong in your pack `.ttl`.
157
+ - Overriding the segmenter or grouper before `evaluate_ingestion` shows the default fails on your documents.
158
+ - An extractor that returns records without `span_id`, or cites a span outside its unit (the run reports it as an
159
+ extraction failure, and the records are not written).
160
+ - Re-parsing table text with regexes when `Unit.table_row` / `table_rows` already give the exact cells.
161
+ - Importing engine internals (`rag_wright.ingestion.*`, `rag_wright.store.*`): everything here is on `rag_wright.api`.
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: creating-evals
3
+ description: >-
4
+ Domain-agnostic recipe for creating EVALS for engine/product capabilities, eval-first (TDD): write the eval as
5
+ soon as a capability is DEFINED (its contract + acceptance criterion), before it is implemented. Use it when
6
+ starting a new domain (right after capabilities are defined), when adding or changing a capability, or when A/B-ing
7
+ alternatives (e.g. a trained classifier vs a System-1 decision model). Covers gold-set design + reliability,
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.
11
+ ---
12
+
13
+ # Creating evals (eval-first / TDD)
14
+
15
+ An eval is the **executable acceptance criterion** for a capability. Write it **as soon as the capability is
16
+ DEFINED** — its contract (typed in/out) and its acceptance criterion exist — **before it is implemented**. This is
17
+ TDD at the capability level: the eval fails (red) on the unbuilt/weak capability, you implement to green, then you
18
+ can A/B alternatives and catch regressions forever. Corollary observed repeatedly in this engine: **the training
19
+ data you build for a classifier/decision model IS an eval** (a labeled gold set + a metric) — so building the eval
20
+ first also gives you the data design for free.
21
+
22
+ 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
+ worked examples; your evals live in your repo.
24
+
25
+ ## When to use
26
+ - **Starting a new domain**: the FIRST build step after capabilities are defined (step 5 of the domain-adaptation guide, `docs/domain-adaptation/README.md`) — write
27
+ each capability's eval before/while you implement it.
28
+ - Adding or changing a capability, or tuning a threshold/prompt/model.
29
+ - **A/B-ing alternatives** on one capability (a deterministic rule vs a trained classifier vs a System-1 decision
30
+ model vs an LLM) — the eval is the neutral judge; select on the metric.
31
+
32
+ ## 1. Design the gold set (the foundation — get this right FIRST)
33
+ - **Real, in-domain items + expected outputs/labels.** Small but REPRESENTATIVE; never the easy cases only.
34
+ - **Reproducible + pinned + gitignored.** The gold is a generated artifact: pin its source snapshot + the selected
35
+ ids so it rebuilds identically; gitignore the data, commit the BUILDER. (Pattern: `eval/build_golden.py`.)
36
+ - **Leakage-safe + balanced.** Split by the natural grouping unit (document / source / record), not by row.
37
+ For classification, a SYMMETRIC per-class test and a per-class FLOOR (not overall accuracy — it hides dead
38
+ classes). "k-shot" = k per class.
39
+ - **The gold is the CEILING — measure its RELIABILITY.** For subjective/ambiguous labels, get a second
40
+ independent labeling and report inter-annotator (or inter-pass) agreement; adjudicate the disagreements and
41
+ document the calls. A model cannot beat the gold's own consistency, and label ambiguity in the gold shows up as a
42
+ classifier ceiling you cannot train past (CIC-1c: a two-pass gold agreed at 0.905 and a trained SetFit capped
43
+ ~0.82 — diagnose the gold before blaming the model). If you have no human expert yet, a documented rubric + a
44
+ two-pass consensus is
45
+ the honest proxy — say so.
46
+ - **Validate silver against a small BLIND hand-labelled sample before treating it as gold.** Label the sample
47
+ without seeing any model output, then measure silver-vs-hand agreement. If it is low, the hand-labelled sample IS
48
+ the gold. (ING-9: silver judge labels derived from classifier test sets agreed only 64% with hand labels; the
49
+ decision rested on 192 blind hand-labelled cases. Pattern: `eval/semantic_judge_gold.py --score-blind`.)
50
+ - **Separate a tuning set from a held-out set.** Label the held-out set BEFORE any prompt runs on it, tune only on
51
+ the tuning set, and report both numbers (ADR-0122 boundary residue prompt: 94.5% held-out vs 96.2% tuning). A
52
+ number measured only on the set you tuned on is not a result.
53
+ - **Gold stays local when the corpus is restrictively licensed** (CUAD/ACORD-derived gold lives under the
54
+ gitignored `data/eval/`); commit the builder and the scorer, never the data.
55
+
56
+ ## 2. Pick the metric by capability KIND, and split GATE vs DIAGNOSTIC
57
+ Always set ONE pass/fail **gate** (from the acceptance criterion) and report **diagnostics** alongside (never gate
58
+ on a diagnostic).
59
+ - **Extraction** (section → records, clauses, requirements): recall / precision / F1 of extracted items vs gold,
60
+ reported SEPARATELY (under- vs over-extraction are different failures). Watch over-extraction on non-operative
61
+ input (definitions) and under-extraction on long input.
62
+ - **Classification / typed decision** (incl. SetFit, Laya, **Jev**): per-class recall + the per-class **floor**;
63
+ symmetric eval; top-k recall for multi-label (reported against tags-per-item). Prefer a soft-tag/calibrated
64
+ metric when the output routes rather than hard-gates.
65
+ - **Evaluate it the way its consumers USE it (ADR-0126).** List every consumer of the output first. If anything acts
66
+ on the PRIMARY label (a link, a record's type, a route), report top-1 accuracy as well as top-k recall: a top-k
67
+ metric hides a confusable pair whose correct label is always rank 2. Measure on PIPELINE-PRODUCED inputs (what the
68
+ segmenter really emits: headings, fragments, mixed sentences, the many no-label spans), not only on curated
69
+ snippets. And before declaring a classifier swap has "no downstream impact", check each consumer of its primary
70
+ label end to end. (ADR-0114's SetFit clause classifier passed >0.65 top-3 recall on gold snippets; in the pipeline
71
+ its top-1 confused Cap / Uncapped Liability, which silently broke exception linking.)
72
+ - **Retrieval**: recall@k (binary, relevant = grade ≥ a floor) as the GATE; nDCG@k (graded, exp gain) as a
73
+ DIAGNOSTIC (do NOT threshold nDCG). Isolate the retrieval legs (score corpus-ids before rehydration). Pattern:
74
+ `eval/acord_retrieval.py`.
75
+ - **Graph / relational**: recall over the answer SET (reachability/traversal), k large enough to cover the set;
76
+ node ids match gold by construction. Pattern: `eval/relational_eval.py`.
77
+ - **Generation / QA**: citation-recall / groundedness / correct-abstention; LLM-as-judge for free-text, but anchor
78
+ with deterministic checks (a cited span must exist). Generation is non-deterministic near the abstain boundary —
79
+ measure over several runs.
80
+ - **Judgment / compliance verdicts**: report PRECISION and RECALL of the actionable class (e.g. violation)
81
+ SEPARATELY (alert-fatigue vs missed), and break out by provenance (real vs constructed). Pattern:
82
+ `scripts/eval_compliance_gold.py`. For a judge that accepts or refutes other outputs, report the **error-catch
83
+ rate** (wrong outputs refuted), the **false-refute rate** (correct outputs refuted) and **calibration** (do its
84
+ scores mean what they say), not one accuracy number. Pattern: `eval/semantic_judge_gold.py` (ING-9: decision
85
+ model 95.3% vs LLM 90.1% on 192 blind hand-labelled cases).
86
+ - **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 /
88
+ precision 0.88 vs the LLM's 0.60 / 0.79. Pattern: `eval/residual_decision_gold.py`). **Count is not accuracy**:
89
+ emitting more values is not a win without precision.
90
+ - **Ingestion structure**: `evaluate_ingestion` (in `rag_wright.api`) is the packaged structural eval of the
91
+ ingestion hooks (tiling, table-row integrity, layout respect, coverage) on your own sample documents. Gate
92
+ patterns: `eval/segmenter_eval.py`, `eval/unit_grouper_eval.py`.
93
+
94
+ ## 3. Build the gold cheaply (without faking it)
95
+ - **Silver bootstrapping**: a higher-capability teacher (LLM, or a decision model) labels candidate items; CURATE
96
+ with reject-rules; mark silver, never conflate with gold. (Teacher labeling runs on the flat-GPU substrate per
97
+ `qwen-vllm-modal`, not ad-hoc paid calls.)
98
+ - **Real public datasets** where they exist (e.g. labeled corpora for the task) — add to TRAIN; keep the TEST
99
+ in-corpus + human-adjudicated so it stays an honest transfer test.
100
+ - **Generate hard cases** (near-boundary positives/negatives) to stress the exact confusions — TRAIN-ONLY; the
101
+ gold test stays real. (Full data playbook: the `setfit` skill Phase 1/4 + `classifier-opportunity-analysis`.)
102
+
103
+ ## 4. Make it an executable, isolated harness
104
+ - **Isolate the capability under test**: inject it (a seam / `extract_override` / an injected `retrieve`) so the
105
+ eval measures ONE capability, not the whole pipeline. Invoke production code THROUGH the capability layer
106
+ (`ainvoke_subgraph`/`ainvoke_model`), never a hand-built copy. Score the **shipped request** (the exact
107
+ prompt/question builder production uses, e.g. `judge_request`), not a copy of it re-typed in the eval.
108
+ - **Repeatability for non-deterministic models.** Run each case several times on identical input; report how many
109
+ answers flip and how far the scores sit from the threshold. Flips cluster near the threshold and usually mean
110
+ the QUESTION is ambiguous: fix the question, do not vote it away (Jev flipped 5/181 answers at scores 0.47-0.56;
111
+ temperature/seed did not help, majority voting barely helped, rewriting the ambiguous question did. The ADR-0122
112
+ boundary residue prompt went from 94-96% with flips to 460/461, zero flips across 3 calls). Pattern:
113
+ `eval/boundary_residue_gold.py`.
114
+ - **Cache keys include the prompt and the method.** Any decision or extraction cache must key on the prompt text
115
+ and the method (decision model vs LLM, and which model), so an eval never reuses outputs a different prompt or
116
+ method produced (ADR-0122 ING-4d / ADR-0040 ING-9b: the residue decision cache and the clause cache).
117
+ - **Score from a RESULT ARTIFACT (JSON), not stdout scraping** (scraping truncates and silently drops rows).
118
+ - **Parallelize** model/LLM calls (async + semaphore) — same cost, far less wall-clock; order-preserving so it
119
+ stays deterministic.
120
+ - **Env-selected** so the SAME harness runs local (dev) or on Modal (full corpus + GPU).
121
+ - **Pre-flight paid bulk** (>~50 paid calls): print the exact count + cost and wait (`warn-before-bulk` rule).
122
+ - Stream `X/N` progress + actively monitor any run over ~30s (never launch-and-forget).
123
+ - **Hermetic tests never touch the network**: `tests/conftest.py` fails a test that resolves a non-local host unless
124
+ it carries a live marker (`model`, `store`, ...). Live evals run as `uv run python -u eval/<name>.py` (outside
125
+ pytest) or carry a live marker.
126
+
127
+ ## 5. Langfuse — optional eval automation (we already use it for tracing)
128
+ Langfuse has a first-class eval stack we are NOT yet using (we use it only for spans/usage today): a **Dataset**
129
+ (items = input + optional expected output) → a **Task** (your capability) run over the dataset as an **Experiment
130
+ Run** → **Evaluators** (deterministic checks or LLM-as-judge) producing **Scores** (numeric/categorical/boolean),
131
+ all linked to traces. Reach for it when you want **tracked, re-runnable, dashboarded** evals + regression tracking
132
+ across capability versions; a local JSON harness is enough for a quick one-off gate. Keep the gold BUILDER + a
133
+ committed snapshot in the repo (reproducibility); push the items to the Langfuse dataset so runs and scores land
134
+ next to the traces you already collect. Ground the exact Dataset/Experiment API before wiring
135
+ (https://langfuse.com/docs/evaluation/concepts, https://langfuse.com/docs/datasets/overview); confirm the installed
136
+ SDK version's surface, not prose.
137
+
138
+ ## 6. The TDD loop
139
+ 1. Write the eval from the contract + a handful of real gold items → it fails (red) on the unbuilt/weak capability.
140
+ 2. Implement the minimum to pass the gate (green).
141
+ 3. A/B alternatives (rule / trained classifier / decision model / LLM) on the SAME gold; select on gate + diagnostics + cost + calibration.
142
+ 4. Keep the eval; it is the regression guard (the Beyonce rule — if you shipped it, it has an eval).
143
+
144
+ ## Anti-patterns (seen, do not repeat)
145
+ - **Overall accuracy** instead of a per-class floor — hides dead classes.
146
+ - **Testing on teacher/generated data as if it were gold** — measures mimicry, not accuracy; keep the test real + adjudicated.
147
+ - **Gating on a diagnostic** (e.g. nDCG) — report it, don't threshold it.
148
+ - **No reliability check on a subjective gold** — you can't read a number off a gold whose own labels disagree.
149
+ - **Eval not isolated** to the capability (measures the whole pipeline) — you can't attribute a regression.
150
+ - **Scraping stdout** for metrics — write + read a JSON artifact.
151
+ - **Faking a win by shrinking the sample / picking easy items** — real, representative, honest.
152
+
153
+ ## Hand-off / where this sits
154
+ Chain: `classifier-opportunity-analysis` (identify the decision) → **`creating-evals` (THIS — write the eval FIRST)**
155
+ → build it (a deterministic rule, or `setfit`/`laya`/Jev for a decision, or an LLM) → `authoring-a-capability`
156
+ (register). In the new-domain build sequence, this is the step right after capabilities are defined.
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: laya
3
+ description: Recipe for fine-tuning and serving a Laya (ModernBERT-large, RL-trained typed-decision) classifier -- the OPEN-weight System-1 decision model -- to replace an LLM decision that a SetFit/encoder classifier PLATEAUS on. Also explains Jev, the MANAGED zero-shot sibling (OpenRouter Decisions API), and when to A/B Jev first (usually) vs fine-tune Laya (on-prem / no managed API). Use when confusable/relational/subjective closed-vocab values won't clear the bar with any encoder backbone. Covers uv install + env-isolation gotchas, the JSONL schema, per-value criteria, single-T4 fine-tune (RLCD), few-shot-in-context, balance, OOM knobs, Modal harness, CPU/MPS/GPU serving, and the jev_decision/DecisionModelProfile wiring (ADR-0119).
4
+ ---
5
+
6
+ # Laya typed-decision classifier recipe
7
+
8
+ Laya (https://github.com/NandhaKishorM/laya) is a **non-autoregressive "System-1 decision engine"**: a
9
+ ModernBERT-large encoder + an **RL-trained decision head** that makes a typed `choice` / `score` / `noul` in one
10
+ forward pass, with per-option **criteria** (written descriptions) and calibrated confidence. It is the **escalation
11
+ past SetFit**: use it when the decision — not the representation — is the bottleneck.
12
+
13
+ **Every number below is a DIRECTION from one project, never a target — re-measure on your own data.**
14
+
15
+ ## Laya vs Jev (the managed sibling) — pick the decision model first
16
+ Laya is the **open-weight** System-1 decision model; **Jev** (TypeSafe, https://openrouter.ai, `typesafe/jev-1.13`
17
+ via the OpenRouter **Decisions API**) is the **managed** one — same idea (typed `noul`/`choice`/`score` + calibrated
18
+ probabilities), but **strong ZERO/few-shot with no fine-tuning**, whereas Laya scores near-random zero-shot and MUST
19
+ be fine-tuned. Measured (RAG_Wright CIC-1c, ADR-0119): on the operative-rule gate **Jev zero-shot hit 0.92** where a
20
+ trained SetFit capped ~0.82 and fine-tuned Laya reached ~0.70–0.74. So: **for a closed-set decision, A/B Jev
21
+ (zero-shot, instant) first**; reach for Laya when a **managed API is unacceptable** (on-prem / data-residency) and
22
+ you can fine-tune. In RAG_Wright a decision model is wired as a `kind="model"` capability (`jev_decision`) behind a
23
+ `DecisionModelProfile` (model id / endpoint / thresholds in config) — see `setfit` Phase 0.5 +
24
+ `authoring-a-capability`. The decision questions/criteria live in the `.ttl` (ADR-0066), not the capability.
25
+
26
+ **Swapping Jev for Laya is config, but not free.** `DECISION_PROFILES` has only Jev entries (`jev-1.13`, the
27
+ default, and `jev-latest`). A Laya swap needs (1) a server that speaks the Decisions API (POST
28
+ `{model, state, questions}`, return `{answers: {<id>: {type, noul|choice|score}}}`), and (2) a `DecisionModelProfile`
29
+ entry in `DECISION_PROFILES` with its `endpoint`, `served_model_id` and `api_key_env` (an unknown id falls back to
30
+ the OpenRouter endpoint). Then select it with `RAG_DECISION_MODEL=<profile id>`;
31
+ `RAG_JEV_TIMEOUT_S` overrides the request timeout.
32
+
33
+ **Batch the questions.** One call carries one `state` and many keyed questions, so ask everything about a unit in
34
+ ONE call (the reference pack judges all of a provision's values, and labels all of its residual candidates, in one
35
+ call each). That is the cost shape: one call per unit, not per value.
36
+
37
+ **Repeatability.** Answers near the threshold can flip across identical calls (Jev: 5/181 flips, all at scores
38
+ 0.47-0.56; temperature/seed did not help, majority voting barely helped). Fix the ambiguous question instead: state
39
+ the rubric once, use structural criteria, pass the items without surrounding text. Re-measure flips on any Laya
40
+ server you swap in.
41
+
42
+ ## When to use Laya (vs SetFit)
43
+ - A closed-vocab value **plateaus below the bar with EVERY encoder backbone you try** (we ruled it out with
44
+ LegalBERT, bge-large, all-mpnet, AND ModernBERT-large as SetFit bodies — all stuck). That means the bottleneck is
45
+ the *decision* ("who bears the obligation", "which side is favored", "may either party terminate?"), not the
46
+ embedding. Laya's RL-against-proper-scoring-rules training targets exactly that.
47
+ - Measured proof it's a different mechanism: `termination_right` cleared 0.68 with Laya where four encoders maxed at
48
+ 0.60–0.64. It is NOT magic — it did NOT rescue minority-data-starved or purely-numeric dims (see Limits).
49
+ - Default to SetFit first (cheaper, simpler, CPU-native). Reach for Laya only for the residual confusable/relational
50
+ dims SetFit can't crack.
51
+
52
+ ## Install — uv only, and beware env bleed
53
+ - **uv, never pip.** Locally `uv add laya`; on Modal `.uv_pip_install("laya", extra_index_url="https://download.pytorch.org/whl/cu124")` for CUDA torch wheels.
54
+ - **The env-bleed gotcha (cost real time):** a bare `uv run --with laya` on a machine with a system Anaconda picked
55
+ up conda's numpy/scipy/sklearn and crashed (`numpy.core.multiarray failed to import`). FIX: force uv's own managed
56
+ Python with a cleared path — `PYTHONPATH= PYTHONNOUSERSITE=1 uv run --python 3.11 --with laya python …` — or run
57
+ inside a proper isolated uv project. Never let a base conda leak in.
58
+ - Deps are compatible with our stack: `transformers>=4.48`, `torch>=2.0`, `huggingface_hub`, Python ≥3.10.
59
+
60
+ ## Checkpoints — pick the ENGLISH base, not multilingual
61
+ - English base = `convaiinnovations/laya` **root** (`laya.load("convaiinnovations/laya")`, subfolder=None) —
62
+ ModernBERT-large. `subfolder="multilingual"` = mmBERT; `subfolder="typed-decisions"` = a fine-tuned variant.
63
+ - **The fine-tune script defaults `--model-dir` to the MULTILINGUAL subfolder** — you must pass the English root
64
+ explicitly, e.g. `snapshot_download("convaiinnovations/laya", allow_patterns=["*.json","*.safetensors","encoder/*","tokenizer/*"])` and point `--model-dir` there. A checkpoint dir = `{encoder/, tokenizer/, model.safetensors, rl_agent_config.json}`.
65
+ - Base checkpoints score ~chance zero-shot (~0.36); **all the value is in fine-tuning.** (Zero-shot on our clauses
66
+ was directionally right but ~0.5 confidence — expected.)
67
+
68
+ ## Data — the JSONL schema + criteria (the differentiator)
69
+ One JSONL line per case (`research/scripts/finetune_single_device.py` reads this exact shape):
70
+ ```
71
+ {"state": "<clause text>",
72
+ "questions": {"<dim>": {"type":"choice","instructions":"<the question>","criteria":{"<value>":"<description>", ...}}},
73
+ "gold": {"<dim>": {"probabilities": {"<value>": <p>, ...}, "label": "<value>"}}}
74
+ ```
75
+ - **`criteria` = per-value written descriptions = the semantic-guidance lever SetFit never had.** Author them from
76
+ the ontology (`.ttl`); if the ontology is thin (ours had vocab but no per-value defs), author from the value
77
+ semantics and CONFIRM with a human before training. Wording matters — it directly shapes what the model learns.
78
+ - **`gold` is a DISTRIBUTION (soft targets), not a hard label** — RLCD trains on the teacher's probability per option.
79
+ One-hot (`{gold:1.0, other:0.0}`) works and is the pragmatic start; true soft targets (teacher per-option probs)
80
+ are the design-intended enhancement.
81
+ - Reuse your existing **contract-disjoint, symmetric splits** so floors are directly comparable to SetFit. Silver
82
+ goes in TRAIN only; val/test stay gold.
83
+
84
+ ## Fine-tune — single T4, RLCD, calibration built in
85
+ - From a clone of the laya repo (its own uv project, not your product's env): `uv run python research/scripts/finetune_single_device.py --data <train.jsonl> --model-dir <english-base> --output-dir <out> --epochs 4` (reproduces the 2×T4 notebook without DDP; CPU/one-GPU; flags: `--data`, `--model-dir`, `--output-dir`, `--device`, `--epochs`, `--seed`). Inside the Modal image the harness runs the copied script with the container's own `python`.
86
+ - Runs on **one 16 GB GPU (T4)** — ~1–2 h for large data, minutes for our small dims. RLCD = soft-CE + GRPO-style
87
+ policy gradient on proper scoring rules. Calibration (one temperature per type) is fitted inside the run on a
88
+ held-out slice; **argmax/accuracy unchanged, only confidence moves** — always fit before gating on confidence.
89
+ - **OOM knobs:** ModernBERT-large (~400M) is tight on a 16 GB T4/L4. The single-device script has NO batch or
90
+ sequence flags: it fixes `micro_batch = 8`, `max_tokens_per_batch = 4096`, `max_len = 1024` and `head_max_len = 256`
91
+ in code, and turns on gradient checkpointing on CUDA. Our short-clause dims ran with it unchanged. If a run still
92
+ OOMs, lower those values in a copy of the script, or use the repo's `laya_finetune_typed_decisions_mps.py` (under notebooks/), which
93
+ takes `--micro-batch` and `--grad-accum`.
94
+ - **Run preflight FIRST — see the [[setfit]] "Run preflight & monitoring" section.** It is framework-agnostic and
95
+ applies to Laya exactly as to SetFit, including when you GENERATE the Laya JSONL labels with a teacher: resolve
96
+ the model from the engine (never a hardcoded/stale id; bulk teacher labeling on Modal Qwen, not OpenRouter), load
97
+ `.env` by EXPLICIT path from an out-of-repo script, SMOKE one item before the fan-out, and stream X/N to a log you
98
+ actively monitor. Those exact mistakes cost runs on 2026-10-04.
99
+ - **Modal harness = reuse the [[setfit]] hardened pattern:** `.uv_pip_install("laya")` + `.add_local_file` the
100
+ finetune script; launcher BLOCKS on `.get()` per spawn (no spawn-and-return), stamps + verifies a `data_sha`,
101
+ writes a manifest, streams X/N; snapshot keepers server-side to a `/checkpoints/<name>` path (a small copy fn) —
102
+ the laya volume has no built-in snapshot, add one. Never lose a fine-tune.
103
+ - **ACCOUNT CONTAINER CAP = 10 (fzaidi2014).** Spawning more than 10 fine-tunes at once does NOT run them all —
104
+ Modal queues the rest and runs ~10 at a time (correct, but ~N/10 waves of wall-clock, and a "why only 10 running?"
105
+ surprise). Size a `groupbake`/dimbatch fan-out to ≤10 in flight (chunk into waves + gather between), or state the
106
+ wave count honestly. This is a DIFFERENT knob from the vLLM `max_containers=1` + `@modal.concurrent` batching in the
107
+ qwen-vllm-modal skill — do not conflate. (Ignored the stated cap once, spawned 29 → 3 waves.)
108
+
109
+ ## Levers that matter (measured, dim-dependent)
110
+ - **Few-shot-in-`state` is a big BUT dim-dependent lever.** Prepend a few labeled exemplars (from TRAIN, per class)
111
+ to the state. It lifted subjective/relational dims a lot (favorability 0.17→0.50, party_asymmetry 0.18→0.55) and
112
+ **HURT a numeric dim** (cap_basis 0.40→0.00, collapsed). **A/B few-shot per dim; never assume it helps.**
113
+ - **Balance: don't down-sample to tiny data.** Balancing favorability DOWN to 18/18 (36 rows) + soft targets
114
+ COLLAPSED it (0.00) — the larger imbalanced set did better (0.50). A starved minority value needs balance-**UP**
115
+ (mine more minority data), not down-sampling the majority.
116
+ - **The residual failures are minority-data-starvation, not a Laya ceiling** — the closest miss (party_asymmetry
117
+ 0.55) is one minority-silver top-up from the bar. Diagnose starvation before concluding "Laya can't."
118
+
119
+ ## Limits (honest)
120
+ - Laya rescues *decision-limited* confusable dims; it does **not** fix (a) **minority-data-starved** values (needs
121
+ more data), or (b) **numeric/structural** distinctions (cap_basis "fixed sum vs multiple-of-fees" — encoders and
122
+ Laya both failed; that belongs on the LLM).
123
+
124
+ ## Serving — device-agnostic, load once
125
+ - `agent = laya.load(<checkpoint>)` — device auto: CUDA → MPS → CPU. **Verified on a Mac (MPS): ~25 s load, ~1.8 s
126
+ first-call warmup, then ~80–140 ms/call.** Runs on CPU too. So it honors the engine's "use a GPU if present, else
127
+ CPU" philosophy — same as SetFit and the LLM profiles.
128
+ - **Load once / preload** (`Router(preload=True)`); never load per call. Serve behind the existing extractor seam so
129
+ nothing upstream changes. The checkpoint is ~820 MB (ModernBERT-large) — heavier than a SetFit body+joblib head;
130
+ budget the memory when co-loading with SetFit models.
131
+ - Serving location is NOT pinned: single T4, share the LLM's A100, or CPU/Mac — the seam + a device arg decide at
132
+ runtime, exactly like the model-profile seam for the LLM.
133
+
134
+ ## Reference implementation
135
+ The laya repo (its `research/scripts/finetune_single_device.py`, its fine-tuning guide and its `examples/`) and
136
+ the engine authors' own Modal fine-tune + eval + data builders (a private working repo, not shipped). Re-use the PATTERNS; the criteria, thresholds, and floors are specific to that problem.