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