rag-wright 0.8.0__tar.gz → 0.9.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 (1020) hide show
  1. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/authoring-a-capability/SKILL.md +15 -8
  2. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +23 -3
  3. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/creating-evals/SKILL.md +8 -6
  4. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/laya/SKILL.md +9 -7
  5. {rag_wright-0.8.0/src/rag_wright/.agents → rag_wright-0.9.0/.claude}/skills/qwen-vllm-modal/SKILL.md +13 -6
  6. {rag_wright-0.8.0/src/rag_wright/.agents → rag_wright-0.9.0/.claude}/skills/setfit/SKILL.md +7 -4
  7. {rag_wright-0.8.0/src/rag_wright/.agents → rag_wright-0.9.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +58 -7
  8. {rag_wright-0.8.0 → rag_wright-0.9.0}/.env.example +3 -2
  9. rag_wright-0.9.0/.release-please-manifest.json +3 -0
  10. {rag_wright-0.8.0 → rag_wright-0.9.0}/CHANGELOG.md +9 -0
  11. {rag_wright-0.8.0 → rag_wright-0.9.0}/CLAUDE.md +1 -1
  12. {rag_wright-0.8.0 → rag_wright-0.9.0}/PKG-INFO +3 -3
  13. {rag_wright-0.8.0 → rag_wright-0.9.0}/README.md +2 -2
  14. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/ArcadeDB_Local.md +15 -7
  15. rag_wright-0.9.0/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +95 -0
  16. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/README.md +4 -3
  17. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/api/README.md +39 -1
  18. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/api/pack_sdk.md +16 -0
  19. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/configuration.md +24 -1
  20. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/README.md +11 -5
  21. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/_engine-gaps.md +25 -3
  22. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/authoring-capabilities.md +3 -2
  23. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/classification-and-decision-models.md +7 -6
  24. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/installation.md +36 -19
  25. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/quickstart.md +1 -1
  26. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/plan.md +7 -0
  27. rag_wright-0.9.0/docs/specs/public-surface/rulewright-arcadedb-separation.md +67 -0
  28. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/templates/product-starter/CLAUDE.md.template +95 -24
  29. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/templates/product-starter/README.md +12 -6
  30. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/templates/product-starter/playbook.md.template +54 -14
  31. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/workspaces.md +18 -0
  32. {rag_wright-0.8.0 → rag_wright-0.9.0}/pyproject.toml +1 -1
  33. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +15 -8
  34. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +23 -3
  35. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +8 -6
  36. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/laya/SKILL.md +9 -7
  37. {rag_wright-0.8.0/.claude → rag_wright-0.9.0/src/rag_wright/.agents}/skills/qwen-vllm-modal/SKILL.md +13 -6
  38. {rag_wright-0.8.0/.claude → rag_wright-0.9.0/src/rag_wright/.agents}/skills/setfit/SKILL.md +7 -4
  39. {rag_wright-0.8.0/.claude → rag_wright-0.9.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +58 -7
  40. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/__init__.py +17 -3
  41. rag_wright-0.9.0/src/rag_wright/api/agents.py +31 -0
  42. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/config.py +8 -3
  43. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/workspace.py +57 -2
  44. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/profiles.py +15 -0
  45. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/seam.py +78 -0
  46. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/pack_sdk/__init__.py +4 -1
  47. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +9 -7
  48. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +5 -5
  49. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +5 -5
  50. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +4 -4
  51. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +3 -3
  52. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +5 -4
  53. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/store/arcadedb.py +10 -0
  54. {rag_wright-0.8.0 → rag_wright-0.9.0}/tasks.md +6 -3
  55. rag_wright-0.9.0/tests/api/test_agent_chat_model.py +213 -0
  56. rag_wright-0.9.0/tests/api/test_agent_chat_model_live.py +32 -0
  57. rag_wright-0.9.0/tests/api/test_drop_workspace.py +95 -0
  58. rag_wright-0.9.0/tests/api/test_drop_workspace_live.py +26 -0
  59. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_pack_sdk.py +4 -1
  60. rag_wright-0.9.0/tests/api/test_public_gaps_ps38.py +77 -0
  61. {rag_wright-0.8.0 → rag_wright-0.9.0}/uv.lock +1 -1
  62. rag_wright-0.8.0/.release-please-manifest.json +0 -3
  63. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/settings.json +0 -0
  64. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  65. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  66. {rag_wright-0.8.0 → rag_wright-0.9.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  67. {rag_wright-0.8.0 → rag_wright-0.9.0}/.github/workflows/publish.yml +0 -0
  68. {rag_wright-0.8.0 → rag_wright-0.9.0}/.github/workflows/release-please.yml +0 -0
  69. {rag_wright-0.8.0 → rag_wright-0.9.0}/.gitignore +0 -0
  70. {rag_wright-0.8.0 → rag_wright-0.9.0}/LICENSE +0 -0
  71. {rag_wright-0.8.0 → rag_wright-0.9.0}/SPEC.md +0 -0
  72. {rag_wright-0.8.0 → rag_wright-0.9.0}/conftest.py +0 -0
  73. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  74. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/OBSERVABILITY.md +0 -0
  75. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  76. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  77. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  78. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  79. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0005-relational-golden-set.md +0 -0
  80. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0006-model-profile.md +0 -0
  81. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  82. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  83. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  84. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  85. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  86. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  87. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  88. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  89. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  90. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  91. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  92. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  93. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  94. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  95. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  96. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  97. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  98. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  99. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  100. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  101. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  102. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  103. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  104. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  105. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  106. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  107. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  108. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  109. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  110. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  111. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  112. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  113. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  114. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  115. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  116. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  117. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  118. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  119. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  120. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  121. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  122. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  123. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  124. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  125. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  126. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  127. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  128. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  129. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  130. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  131. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  132. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  133. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  134. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  135. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  136. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  137. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  138. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  139. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  140. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  141. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  142. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  143. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  144. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  145. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  146. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  147. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  148. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  149. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  150. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  151. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  152. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  153. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  154. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  155. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  156. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  157. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  158. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  159. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  160. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  161. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  162. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  163. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  164. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  165. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  166. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  167. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  168. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  169. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0095-span-page-provenance.md +0 -0
  170. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  171. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  172. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  173. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  174. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  175. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  176. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  177. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  178. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  179. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  180. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  181. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  182. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  183. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  184. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  185. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  186. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  187. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  188. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  189. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  190. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  191. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  192. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  193. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  194. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  195. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  196. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  197. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  198. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  199. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  200. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  201. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  202. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  203. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  204. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  205. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  206. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  207. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  208. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  209. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  210. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  211. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  212. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  213. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  214. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/architecture.md +0 -0
  215. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/README.md +0 -0
  216. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  217. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  218. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  219. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  220. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  221. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  222. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  223. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  224. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  225. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  226. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  227. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  228. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  229. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  230. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  231. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  232. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  233. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  234. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  235. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  236. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  237. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  238. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  239. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  240. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  241. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  242. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  243. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  244. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  245. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  246. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  247. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  248. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  249. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  250. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  251. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  252. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  253. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  254. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  255. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  256. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  257. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  258. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  259. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  260. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  261. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  262. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  263. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  264. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  265. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  266. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  267. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  268. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  269. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  270. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  271. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  272. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  273. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  274. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  275. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  276. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  277. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/misc/.gitkeep +0 -0
  278. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  279. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/async-migration.md +0 -0
  280. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/demo_plan.md +0 -0
  281. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  282. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  283. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  284. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  285. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  286. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  287. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/concepts.md +0 -0
  288. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/contract_pipeline_explainer.md +0 -0
  289. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/corpus_ingest_recipe.md +0 -0
  290. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  291. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  292. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/kg-construction.md +0 -0
  293. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  294. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/classifier_model_ab.md +0 -0
  295. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/compliance_demo.md +0 -0
  296. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/compliance_gate_cc7.md +0 -0
  297. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  298. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  299. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/dg_model_ab.md +0 -0
  300. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/function_gate_recall.md +0 -0
  301. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  302. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  303. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/ocr_benchmark.md +0 -0
  304. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/prod1_readiness.md +0 -0
  305. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/prod2_readiness.md +0 -0
  306. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/query_side_model_ab.md +0 -0
  307. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  308. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/silver_provider_routing.md +0 -0
  309. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  310. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/evals.md +0 -0
  311. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/playbook.md +0 -0
  312. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/capability_profiles.md +0 -0
  313. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/contracts_product_roadmap.md +0 -0
  314. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/engine-api-migration-handoff.md +0 -0
  315. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/engine_async_api.md +0 -0
  316. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/new-domain-build-sequence.md +0 -0
  317. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/product/seam-adaptation-guide.md +0 -0
  318. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  319. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  320. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  321. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/proposals/ontology-induction.md +0 -0
  322. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/reference-pack.md +0 -0
  323. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/releasing.md +0 -0
  324. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/engine-platform/SPEC.md +0 -0
  325. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/engine-platform/TASKS.md +0 -0
  326. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/engine-prep/plan.md +0 -0
  327. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/evals/plan.md +0 -0
  328. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  329. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  330. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  331. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  332. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  333. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  334. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  335. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  336. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  337. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  338. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  339. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/templates/product-starter/dependabot.yml +0 -0
  340. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  341. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  342. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  343. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  344. {rag_wright-0.8.0 → rag_wright-0.9.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  345. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/__init__.py +0 -0
  346. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/acord.py +0 -0
  347. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/acord_retrieval.py +0 -0
  348. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/boundary_residue_gold.py +0 -0
  349. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/build_golden.py +0 -0
  350. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  351. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  352. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  353. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  354. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/condensed_pipeline.py +0 -0
  355. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/contract_parity_live.py +0 -0
  356. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/contractnli_judge.py +0 -0
  357. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/cuad_highlight.py +0 -0
  358. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/embedded_eval.py +0 -0
  359. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/full_pipeline_rerank.py +0 -0
  360. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/function_ceiling.py +0 -0
  361. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/function_property_rerank.py +0 -0
  362. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/function_rerank.py +0 -0
  363. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/gate1_chunker_ab.py +0 -0
  364. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/gate2_hybrid_rerank.py +0 -0
  365. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/golden/relational/set.json +0 -0
  366. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/golden.py +0 -0
  367. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/ground_discriminator_rerank.py +0 -0
  368. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/harness.py +0 -0
  369. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/ingestion_live_smoke.py +0 -0
  370. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/kg_primary.py +0 -0
  371. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/kg_property_rerank.py +0 -0
  372. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/listwise_rerank.py +0 -0
  373. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/multihop.py +0 -0
  374. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/nl_to_type.py +0 -0
  375. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/relational_eval.py +0 -0
  376. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/residual_decision_gold.py +0 -0
  377. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/segmenter_eval.py +0 -0
  378. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/semantic_judge_gold.py +0 -0
  379. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/test_acord.py +0 -0
  380. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/test_acord_retrieval.py +0 -0
  381. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/test_harness.py +0 -0
  382. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/test_multihop_set.py +0 -0
  383. {rag_wright-0.8.0 → rag_wright-0.9.0}/eval/unit_grouper_eval.py +0 -0
  384. {rag_wright-0.8.0 → rag_wright-0.9.0}/examples/model_server.py +0 -0
  385. {rag_wright-0.8.0 → rag_wright-0.9.0}/examples/quickstart.py +0 -0
  386. {rag_wright-0.8.0 → rag_wright-0.9.0}/plan.md +0 -0
  387. {rag_wright-0.8.0 → rag_wright-0.9.0}/release-please-config.json +0 -0
  388. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ab_model_overlap.py +0 -0
  389. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acord_unify.py +0 -0
  390. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_acord.py +0 -0
  391. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_cuad.py +0 -0
  392. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_ecfr.py +0 -0
  393. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_edgar.py +0 -0
  394. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_ftc_255.py +0 -0
  395. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/acquire_prod1_corpus.py +0 -0
  396. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/audit_reclass_flips.py +0 -0
  397. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/author_leg_a_silver_key.py +0 -0
  398. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/backfill_affiliations.py +0 -0
  399. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/backfill_clause_span_id.py +0 -0
  400. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  401. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/backup_kg_to_gcs.sh +0 -0
  402. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/bootstrap_template_capture.py +0 -0
  403. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/bootstrap_typed_edges.py +0 -0
  404. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/build_api_docs.py +0 -0
  405. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/build_api_docs.sh +0 -0
  406. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/build_cuad_clause_cache.py +0 -0
  407. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/build_function_routing_map.py +0 -0
  408. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_assemble_v2.py +0 -0
  409. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_assemble_v3.py +0 -0
  410. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  411. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_generate_hard_positives.py +0 -0
  412. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_generate_training.py +0 -0
  413. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_hybrid.py +0 -0
  414. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_hybrid2.py +0 -0
  415. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_jev_actor.py +0 -0
  416. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_jev_claimtypes.py +0 -0
  417. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_jev_operative.py +0 -0
  418. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_label_spans.py +0 -0
  419. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_laya_prep.py +0 -0
  420. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_laya_train.py +0 -0
  421. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_prep_operative.py +0 -0
  422. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_relabel_rubric.py +0 -0
  423. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_relabel_rubric2.py +0 -0
  424. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/cic1_train_operative.py +0 -0
  425. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/compare_extraction_models.py +0 -0
  426. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  427. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/compliance_engine_smoke.py +0 -0
  428. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/compliance_policy_demo.py +0 -0
  429. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/curate_taxonomy_gaps.py +0 -0
  430. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/dg_model_ab.py +0 -0
  431. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  432. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  433. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  434. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_legs.py +0 -0
  435. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_pool.py +0 -0
  436. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_relstructure.py +0 -0
  437. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/diagnose_acord_retrieval.py +0 -0
  438. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/eval_all.py +0 -0
  439. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/eval_ce.py +0 -0
  440. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/eval_listwise_b.py +0 -0
  441. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/export_ce_dataset.py +0 -0
  442. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/extract_features.py +0 -0
  443. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/listwise_variants.py +0 -0
  444. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/relational_features.py +0 -0
  445. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/train_ce.py +0 -0
  446. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/distill/train_modal.py +0 -0
  447. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/enrich_edgar_candidates.py +0 -0
  448. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/eval_chunking_ab.py +0 -0
  449. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  450. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/eval_compliance_gold.py +0 -0
  451. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/extract_arcadedb_docs.py +0 -0
  452. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/fetch_reference_models.py +0 -0
  453. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/generate_contract_python.py +0 -0
  454. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/git_post_commit_graphify.sh +0 -0
  455. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/granite_chunker_assess.py +0 -0
  456. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/graph_status.sh +0 -0
  457. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_acord.py +0 -0
  458. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  459. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  460. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_compliance_prod2.py +0 -0
  461. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_cuad.py +0 -0
  462. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_cuad_full.py +0 -0
  463. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_ftc_compliance.py +0 -0
  464. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_prod1.py +0 -0
  465. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_prod1_async.py +0 -0
  466. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ingest_smoke.py +0 -0
  467. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/install_git_hooks.sh +0 -0
  468. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/label_new_functions.py +0 -0
  469. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/legb_function_gate_recall.py +0 -0
  470. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/make_compliance_fixtures.py +0 -0
  471. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/make_compliance_gold.py +0 -0
  472. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  473. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  474. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  475. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/measure_generation_robustness.py +0 -0
  476. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/measure_silver.py +0 -0
  477. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/merge_docs_into_framework.py +0 -0
  478. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  479. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  480. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  481. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/migrate_span_fields.py +0 -0
  482. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/mine_scarce_functions.py +0 -0
  483. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_arcadedb.py +0 -0
  484. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_backfill.py +0 -0
  485. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_exception_linking.py +0 -0
  486. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_gemma4_vllm.py +0 -0
  487. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  488. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_granite_server.py +0 -0
  489. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_granite_throughput.py +0 -0
  490. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_granite_vllm_server.py +0 -0
  491. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_query_app.py +0 -0
  492. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  493. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  494. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  495. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/modal_stack_a100.py +0 -0
  496. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ocr_benchmark.py +0 -0
  497. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ocr_preprocess.py +0 -0
  498. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/ontology_dimension_check.py +0 -0
  499. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/phase_a_leg_validate.py +0 -0
  500. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/populate_clause_kg.py +0 -0
  501. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/populate_entity_graph.py +0 -0
  502. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/populate_entity_graph_extracted.py +0 -0
  503. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/populate_property_store.py +0 -0
  504. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/prep_relational_verification.py +0 -0
  505. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/publish_manifests.py +0 -0
  506. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/reclassify_kg.py +0 -0
  507. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/refresh_framework_graph.sh +0 -0
  508. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/revert_reclass_flips.py +0 -0
  509. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/run_acord_retrieval.py +0 -0
  510. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/run_clause_exception_linking.py +0 -0
  511. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/semantic_judge_live_validate.py +0 -0
  512. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/semantic_judge_probe.py +0 -0
  513. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/snapshot_leg_a_eval.py +0 -0
  514. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/stack_correctness_validate.py +0 -0
  515. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/table_retrieval_smoke.py +0 -0
  516. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/train_function_classifier.py +0 -0
  517. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/train_legalbert_function.py +0 -0
  518. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/train_legalbert_modal.py +0 -0
  519. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/typed_rerank_validate.py +0 -0
  520. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/verify_wheel_install.sh +0 -0
  521. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/vllm_extraction_ab.py +0 -0
  522. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/vllm_kg_query_validate.py +0 -0
  523. {rag_wright-0.8.0 → rag_wright-0.9.0}/scripts/vllm_raw_diagnostic.py +0 -0
  524. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  525. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  526. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  527. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/__init__.py +0 -0
  528. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/answers.py +0 -0
  529. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/discover.py +0 -0
  530. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/documents.py +0 -0
  531. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/ids.py +0 -0
  532. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/invoke.py +0 -0
  533. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/kg.py +0 -0
  534. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/mcp.py +0 -0
  535. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/tracing.py +0 -0
  536. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/api/usage.py +0 -0
  537. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/__init__.py +0 -0
  538. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
  539. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/ard.py +0 -0
  540. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  541. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  542. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  543. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  544. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  545. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/embedding.py +0 -0
  546. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  547. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  548. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/fusion.py +0 -0
  549. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  550. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  551. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  552. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/invoke.py +0 -0
  553. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  554. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/manifests.py +0 -0
  555. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/parsing.py +0 -0
  556. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/registry.py +0 -0
  557. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  558. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/reranking.py +0 -0
  559. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  560. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  561. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  562. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  563. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  564. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  565. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  566. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  567. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/__init__.py +0 -0
  568. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/chunk.py +0 -0
  569. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/evals.py +0 -0
  570. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/extraction.py +0 -0
  571. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/graph.py +0 -0
  572. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/identifiers.py +0 -0
  573. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/ingestion.py +0 -0
  574. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/provenance.py +0 -0
  575. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/contracts/span.py +0 -0
  576. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/corpus/__init__.py +0 -0
  577. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  578. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/corpus/document_parser.py +0 -0
  579. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/corpus/embedded.py +0 -0
  580. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/corpus/http.py +0 -0
  581. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/evals/__init__.py +0 -0
  582. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/evals/gold.py +0 -0
  583. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
  584. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/evals/runner.py +0 -0
  585. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/evals/scorers.py +0 -0
  586. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/__init__.py +0 -0
  587. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/builder.py +0 -0
  588. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/evaluate.py +0 -0
  589. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/group.py +0 -0
  590. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/layout.py +0 -0
  591. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/segment.py +0 -0
  592. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ingestion/tables.py +0 -0
  593. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/__init__.py +0 -0
  594. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/model_servers.py +0 -0
  595. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/tag_structured.py +0 -0
  596. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/tracing.py +0 -0
  597. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/usage.py +0 -0
  598. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/models/weights.py +0 -0
  599. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ontology/__init__.py +0 -0
  600. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  601. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/ontology/registry.py +0 -0
  602. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/__init__.py +0 -0
  603. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  604. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  605. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  606. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  607. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  608. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  609. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  610. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  611. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  612. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  613. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  614. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  615. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  616. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  617. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  618. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  619. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  620. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  621. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  622. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  623. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  624. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  625. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  626. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  627. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  628. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  629. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  630. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  631. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  632. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  633. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  634. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  635. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  636. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  637. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  638. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  639. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  640. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  641. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  642. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  643. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  644. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  645. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  646. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  647. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  648. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  649. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  650. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  651. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  652. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  653. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  654. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  655. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  656. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  657. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  658. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  659. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  660. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  661. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  662. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  663. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/options.py +0 -0
  664. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  665. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  666. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  667. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  668. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  669. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  670. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  671. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  672. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  673. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  674. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  675. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  676. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  677. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  678. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  679. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  680. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  681. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  682. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  683. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  684. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  685. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  686. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  687. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  688. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  689. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  690. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  691. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  692. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  693. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  694. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  695. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  696. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  697. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  698. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  699. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  700. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  701. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  702. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  703. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  704. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  705. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  706. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  707. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  708. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  709. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/packs/reference_seam.py +0 -0
  710. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/py.typed +0 -0
  711. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/__init__.py +0 -0
  712. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  713. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  714. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  715. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  716. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  717. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  718. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  719. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  720. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/spans/__init__.py +0 -0
  721. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/spans/page_map.py +0 -0
  722. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/store/__init__.py +0 -0
  723. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/store/chunk_text.py +0 -0
  724. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/store/seam.py +0 -0
  725. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  726. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  727. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/subgraphs/observability.py +0 -0
  728. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  729. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  730. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/util/__init__.py +0 -0
  731. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/util/concurrent.py +0 -0
  732. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/util/pdfium.py +0 -0
  733. {rag_wright-0.8.0 → rag_wright-0.9.0}/src/rag_wright/util/spacy_model.py +0 -0
  734. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/__init__.py +0 -0
  735. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/__init__.py +0 -0
  736. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_answers_exports.py +0 -0
  737. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_bytes_ingest.py +0 -0
  738. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_capability_reexports.py +0 -0
  739. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  740. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_discover.py +0 -0
  741. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_documents.py +0 -0
  742. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_e2e.py +0 -0
  743. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_invoke.py +0 -0
  744. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_kg.py +0 -0
  745. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_mcp.py +0 -0
  746. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_metering_tracing_exports.py +0 -0
  747. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_model_role_export.py +0 -0
  748. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_open_workspace_reconfig.py +0 -0
  749. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_options.py +0 -0
  750. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_pack_store.py +0 -0
  751. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_pdf_page_count.py +0 -0
  752. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_usage.py +0 -0
  753. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_workspace.py +0 -0
  754. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/api/test_workspace_models.py +0 -0
  755. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  756. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_api_docs_current.py +0 -0
  757. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_doc_references.py +0 -0
  758. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  759. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_import_contracts.py +0 -0
  760. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_lock_version.py +0 -0
  761. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  762. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_pdfium_door.py +0 -0
  763. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/arch/test_shipped_skills.py +0 -0
  764. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/async_helpers.py +0 -0
  765. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/__init__.py +0 -0
  766. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  767. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_answer_generator.py +0 -0
  768. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  769. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  770. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_authoring_contract.py +0 -0
  771. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_chunk_read.py +0 -0
  772. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_chunk_write.py +0 -0
  773. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  774. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_claim_extraction.py +0 -0
  775. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  776. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  777. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_compliance_store.py +0 -0
  778. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  779. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  780. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  781. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  782. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_dg_adapter.py +0 -0
  783. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_dg_async.py +0 -0
  784. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_dg_extraction.py +0 -0
  785. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  786. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_dg_private.py +0 -0
  787. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_disambiguation.py +0 -0
  788. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_document_scope.py +0 -0
  789. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_embedding.py +0 -0
  790. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  791. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_entity_resolution.py +0 -0
  792. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  793. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_fusion.py +0 -0
  794. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_graph_extraction.py +0 -0
  795. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_graph_query.py +0 -0
  796. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_graph_storage.py +0 -0
  797. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_highlight_serve.py +0 -0
  798. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_hybrid_search.py +0 -0
  799. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_jev_decision.py +0 -0
  800. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_manifest_validation.py +0 -0
  801. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_manifests.py +0 -0
  802. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_parsing.py +0 -0
  803. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_parties_extraction.py +0 -0
  804. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  805. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  806. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_query_understanding.py +0 -0
  807. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_registry.py +0 -0
  808. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_remote_encoders.py +0 -0
  809. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_repair_partition.py +0 -0
  810. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  811. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_reranking.py +0 -0
  812. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_retrieval_core.py +0 -0
  813. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  814. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  815. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_rlm_method.py +0 -0
  816. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  817. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_runtime_registry.py +0 -0
  818. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_scan_quality.py +0 -0
  819. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  820. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  821. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  822. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  823. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  824. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  825. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/compliance_fakes.py +0 -0
  826. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/conftest.py +0 -0
  827. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/__init__.py +0 -0
  828. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  829. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_chunk_record.py +0 -0
  830. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_compliance.py +0 -0
  831. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  832. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_extraction.py +0 -0
  833. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_function.py +0 -0
  834. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_function_routing.py +0 -0
  835. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_identifiers.py +0 -0
  836. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  837. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_jurisdiction.py +0 -0
  838. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_ontology.py +0 -0
  839. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_property.py +0 -0
  840. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_provenance.py +0 -0
  841. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/contracts/test_value_match.py +0 -0
  842. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/__init__.py +0 -0
  843. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  844. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_canonicalize.py +0 -0
  845. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_cuad.py +0 -0
  846. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  847. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_document_parser.py +0 -0
  848. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_edgar.py +0 -0
  849. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_embedded.py +0 -0
  850. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  851. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_http.py +0 -0
  852. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_parse_wire2.py +0 -0
  853. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/corpus/test_selection.py +0 -0
  854. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/eval/test_contractnli_judge.py +0 -0
  855. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  856. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/eval/test_kg_property_rerank.py +0 -0
  857. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  858. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/eval/test_relational_eval.py +0 -0
  859. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/__init__.py +0 -0
  860. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_gold_contracts.py +0 -0
  861. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_gold_import.py +0 -0
  862. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_langfuse_backend.py +0 -0
  863. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_runner.py +0 -0
  864. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_scorer_parity.py +0 -0
  865. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_scorers_a.py +0 -0
  866. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_scorers_b.py +0 -0
  867. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_scorers_c.py +0 -0
  868. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/evals/test_scorers_d.py +0 -0
  869. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  870. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  871. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  872. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  873. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  874. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  875. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/foundation/__init__.py +0 -0
  876. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  877. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/foundation/test_model_seam_structured.py +0 -0
  878. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/__init__.py +0 -0
  879. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_aevaluate.py +0 -0
  880. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_builder.py +0 -0
  881. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  882. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  883. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_document_metadata.py +0 -0
  884. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_evaluate.py +0 -0
  885. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  886. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  887. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_sheet_continuations.py +0 -0
  888. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  889. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_table_rows.py +0 -0
  890. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_tuning.py +0 -0
  891. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_unit_grouper.py +0 -0
  892. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ingestion/test_unit_representative.py +0 -0
  893. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/journey/incidents_domain.py +0 -0
  894. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/journey/incidents_pack.ttl +0 -0
  895. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/journey/test_incidents_journey.py +0 -0
  896. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/journey/test_pack_schema.py +0 -0
  897. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/__init__.py +0 -0
  898. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/test_compliance_server.py +0 -0
  899. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  900. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  901. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/test_relational_qa_server.py +0 -0
  902. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  903. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/__init__.py +0 -0
  904. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_async_infra.py +0 -0
  905. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  906. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_model_servers.py +0 -0
  907. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_models_dir.py +0 -0
  908. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_no_gemma_default.py +0 -0
  909. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_profile_routing.py +0 -0
  910. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_profile_seam.py +0 -0
  911. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_seam_async.py +0 -0
  912. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
  913. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_seam_event_loops.py +0 -0
  914. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_seam_retry.py +0 -0
  915. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_seam_stream.py +0 -0
  916. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_serving_seam.py +0 -0
  917. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_serving_wiring.py +0 -0
  918. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_tag_structured.py +0 -0
  919. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_tag_structured_async.py +0 -0
  920. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_tracing.py +0 -0
  921. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/models/test_usage.py +0 -0
  922. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/__init__.py +0 -0
  923. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_clause_template.py +0 -0
  924. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  925. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_derivation.py +0 -0
  926. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  927. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  928. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  929. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  930. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  931. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/reference/test_compliance_reference.py +0 -0
  932. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/reference/test_contract_seam.py +0 -0
  933. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  934. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  935. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  936. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
  937. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/skills/__init__.py +0 -0
  938. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
  939. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  940. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_boundary.py +0 -0
  941. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  942. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  943. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_clause_function_classifier.py +0 -0
  944. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  945. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  946. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  947. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_dim_classifier.py +0 -0
  948. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_dim_fleet_live.py +0 -0
  949. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_function_classifier.py +0 -0
  950. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_hybrid_classifier.py +0 -0
  951. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  952. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_legalbert_classifier.py +0 -0
  953. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_model_capabilities.py +0 -0
  954. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_new_function_labels.py +0 -0
  955. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_page_map.py +0 -0
  956. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_property_extractor.py +0 -0
  957. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_property_grounding.py +0 -0
  958. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_reclassify.py +0 -0
  959. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_residual_decision.py +0 -0
  960. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_scarce_function_labels.py +0 -0
  961. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_segment.py +0 -0
  962. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_segmentation_vocab.py +0 -0
  963. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_semantic_judge.py +0 -0
  964. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  965. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_setfit_probabilities.py +0 -0
  966. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_span_offsets.py +0 -0
  967. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_stage_labels_0005.py +0 -0
  968. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_symbolic_validation.py +0 -0
  969. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  970. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/__init__.py +0 -0
  971. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_affiliation_backfill.py +0 -0
  972. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  973. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_contract.py +0 -0
  974. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_property.py +0 -0
  975. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  976. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_schema.py +0 -0
  977. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_arcadedb_span.py +0 -0
  978. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_chunk_text.py +0 -0
  979. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_concurrent_writes.py +0 -0
  980. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_contract_kg_store_live.py +0 -0
  981. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_document_metadata_live.py +0 -0
  982. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_document_scope.py +0 -0
  983. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_engine_domain_neutral.py +0 -0
  984. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_entities_by_name.py +0 -0
  985. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_kg_edges.py +0 -0
  986. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_kg_mutations.py +0 -0
  987. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_kg_read.py +0 -0
  988. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_kg_write.py +0 -0
  989. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_neutral_schema.py +0 -0
  990. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_store_create_flag.py +0 -0
  991. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/store/test_write_graph_idempotent.py +0 -0
  992. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/__init__.py +0 -0
  993. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  994. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  995. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_clause_results.py +0 -0
  996. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_compliance_check.py +0 -0
  997. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  998. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  999. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1000. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1001. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  1002. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1003. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1004. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1005. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_observability.py +0 -0
  1006. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1007. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1008. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1009. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1010. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_scaffold.py +0 -0
  1011. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1012. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1013. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1014. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/test_backfill_clause_span_id.py +0 -0
  1015. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/test_dg_model_ab.py +0 -0
  1016. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/test_populate_clause_kg.py +0 -0
  1017. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/test_populate_entity_graph.py +0 -0
  1018. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/util/__init__.py +0 -0
  1019. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/util/test_concurrent.py +0 -0
  1020. {rag_wright-0.8.0 → rag_wright-0.9.0}/tests/util/test_spacy_model.py +0 -0
@@ -37,9 +37,13 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
37
37
  1. **Implementation** — the real code, in that kind's home (see per-kind below).
38
38
  2. **The invoke factory + `impl_ref`** (invokable kinds: subgraph/model) — write a co-located
39
39
  `async def ainvoke(resources, inputs)` (subgraph) / `def <name>(resources, inputs)` (model) in the capability's
40
- own module. A subgraph factory builds over the opaque `WorkspaceHandle` (`resources._store`,
41
- `resources._embedder`, `resources.model_id(role)`), never env; a model factory is store-independent and ignores
42
- `resources`. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
40
+ own module. A subgraph factory builds over the opaque `WorkspaceHandle`, never env: its store access with
41
+ `pack_store(resources, YourStore)` (your pack's store extension over the workspace's store) and its models with
42
+ `resources.model_id(role)`; its query embedder with `workspace_embedder(resources)` (`rag_wright.pack_sdk`, built
43
+ from the workspace's embedding profile) and its options with `resources.config`; a model factory is
44
+ store-independent and ignores `resources`. A builder that takes the store as a keyword goes through `pack_store`
45
+ too: `pack_store(resources, lambda store: production_x(store=store, ...))`. The handle's underscored attributes
46
+ are engine-internal; the reference pack's factories show the public form. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
43
47
  it LAZILY and calls it — there is **NO central adapter dict** (EP-CORE-2). A plain function/agent_skill/mcp_tool
44
48
  declares no `impl_ref`.
45
49
  3. **ARD manifest + register it** — a `CapabilityManifest(slug, kind, display_name, description,
@@ -57,8 +61,9 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
57
61
  A downstream product can register without touching the canonical set (`register_capability` does not check
58
62
  slugs), BUT `manifests.author()` rejects a non-canonical slug, so a product that publishes ARD JSON must call
59
63
  `register_canonical_slugs` for its slugs first.
60
- Publish to `~/.air/registry` with `uv run python scripts/publish_manifests.py`; that script publishes only the
61
- engine's reference pack (it calls `load_reference_pack()`), so a product publishes its own with `publish_all`.
64
+ Publish the ARD JSON (`urn:air`) of what is registered with `publish(slug, root=...)` or `publish_all(root=...)`
65
+ from `rag_wright.api` (the root defaults to `ARD_REGISTRY_ROOT`, else `~/.air/registry`); a slug must be canonical
66
+ (`register_canonical_slugs`, above). The engine's `scripts/publish_manifests.py` does this for its reference pack.
62
67
  Callable kinds get `ResponseBounds` (defaulted); `agent_skill` must NOT declare bounds (loaded, not called).
63
68
  4. **Invocable + MCP for free** — once registered with an `impl_ref`, the capability is callable as
64
69
  `ainvoke_subgraph(slug, inputs, resources=ws)` / `invoke_model(slug, inputs, resources=ws)` (or
@@ -79,7 +84,7 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
79
84
  - **Invoke:** the co-located `async def ainvoke(resources, inputs)` factory (impl_ref target) builds + awaits the graph.
80
85
  - Retry/dead-letter come from the graph scaffold, not the invoker. `CapabilityManifest` has no contract field (only
81
86
  the internal `CapabilityRegistry.register(contract=...)` takes one); where the typed I/O must be declared, set
82
- `capability_interface` on the manifest.
87
+ `capability_interface` on the manifest (`CapabilityInterface`, from `rag_wright.pack_sdk`).
83
88
 
84
89
  ### function — a plain, typed callable
85
90
  - **Home:** `capabilities/<slug>.py` (generic) or `packs/<pack>/capabilities/<slug>.py` (domain). A deterministic or model-backed callable with a Pydantic in/out contract.
@@ -103,7 +108,9 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
103
108
  - **Home:** `skills/<slug>/SKILL.md` (generic) or `packs/<pack>/skills/<slug>/SKILL.md` (domain, e.g.
104
109
  `packs/compliance/skills/compliance_judgment/SKILL.md`) + the agent runtime (e.g. `skills/rlm/`). It is LOADED (progressive
105
110
  disclosure), not called: no `ResponseBounds`. Declare `requires=(...)` for a closure over other skills and
106
- `skill_runtime` for its intrinsic runtime.
111
+ `skill_runtime` (`SkillRuntime`, from `rag_wright.pack_sdk`) for its intrinsic runtime.
112
+ - A product's agent (a Deep Agents harness) is not a capability kind yet: an `agent` kind is a later engine workstream
113
+ (PS-33, engine ADR-0139). Build agents in the product, on `agent_chat_model` for their model.
107
114
 
108
115
  ### mcp_tool — a capability exposed over MCP
109
116
  - A distinct ARD identity (`<slug>_mcp`) for the same underlying capability exposed as a cross-agent MCP tool.
@@ -129,7 +136,7 @@ add it to `_RESERVED_WITHOUT_MANIFEST` with a one-line reason. The engine's `tes
129
136
  pack, so these tests see its slugs.
130
137
 
131
138
  **The import boundary (engine repo).** `pyproject.toml` `[tool.importlinter]` has three forbidden contracts: every
132
- generic engine package (`source_modules`: `rag_wright.api`, `capabilities`, `contracts`, `corpus`, `ingestion`,
139
+ generic engine package (`source_modules`: `rag_wright.api`, `capabilities`, `contracts`, `corpus`, `evals`, `ingestion`,
133
140
  `models`, `ontology`, `pack_sdk`, `skills`, `spans`, `store`, `subgraphs`, `util`) must never import
134
141
  `rag_wright.packs`; pack code (`rag_wright.packs`) imports only `rag_wright.api` and `rag_wright.pack_sdk` (plus
135
142
  itself), never another engine package directly; and `rag_wright.packs.contracts` must never import
@@ -149,12 +149,32 @@ network-bound work inside it; the engine runs up to `IngestionTuning.extract_con
149
149
  to its parent, and an `AttachedTo` edge from the child to the table-row span it belongs to, with a confidence and
150
150
  the identifier evidence (`IngestionTuning.identifier` sets what counts as an identifier). The report lists them in
151
151
  `DocumentReport.children`, `links` and `unmapped_links`.
152
+ - **Record table or form, decided per table.** In `auto` mode a table is a database (one unit per row) when its
153
+ header has `RecordTableRule.min_header_cols`+ named columns, `distinct_ratio`+ of them distinct, and either a serial
154
+ first column in `serial_ratio`+ of the rows or `min_cols`+ columns; anything else stays whole (a form). A test log
155
+ or results sheet judged wrongly is fixed with `IngestionTuning(record_table=RecordTableRule(...))`, or per source
156
+ with `IngestSource(table_mode="record"|"block")`. Check the decision on your samples with
157
+ `evaluate_ingestion(..., table_labels=[{"pattern": <regex on the header row>, "label": "record"|"block"}])`
158
+ (first match wins): a block table split per row, or a wide record table not split, is a failure, and tables no
159
+ pattern matched are listed in `unlabelled_tables`.
160
+ - **How an embedded file finds its row.** An identifier is a token of 4+ characters containing a digit that appears
161
+ on at most `IdentifierRule.max_rows` table rows and in at most `max_files` embedded files (defaults 3 and 3; set
162
+ them with `IngestionTuning(identifier=IdentifierRule(...))`). A file whose identifiers match no row, or too many,
163
+ stays a child document with no `AttachedTo` edge and is listed in `unmapped_links`: for a workbook with dozens of
164
+ embedded lab reports, check `links` against what you expect before trusting the graph.
165
+ - **Nesting.** A file embedded in an embedded file is ingested; anything deeper is listed in
166
+ `DocumentReport.embedded_skipped`, not walked.
167
+ - **Stable ids.** `IngestSource(doc_id=...)` gives a document your own id (an upload's record id, say), so a re-ingest
168
+ of the same file lands on the same `Document`.
152
169
 
153
170
  ## 6. Verify (definition of done)
154
171
 
155
- 1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one). If your
156
- units carry labels, its `labels` report on your gold meets the bar you set, with the confusions understood.
157
- 2. A live ingest of that sample: no dead letters, `extraction_failures` explained, records cite spans
172
+ 1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one), with
173
+ `table_labels` covering every table type you have. If your units carry labels, its `labels` report on your gold
174
+ meets the bar you set, with the confusions understood. Inside a web backend use `aevaluate_ingestion` (with
175
+ `progress`) as a background job.
176
+ 2. A live ingest of that sample, in a disposable database (`with temporary_workspace(config, prefix="trial") as ws:`),
177
+ no dead letters, `extraction_failures` explained, records cite spans
158
178
  (`kg_read(ws, "<your type>", fields=["span_id"])`), and `span_positions(ws, doc_id)` gives the citation positions.
159
179
  3. A hermetic test of your extractor on fixed units (no model calls in the default suite; the engine's test network
160
180
  guard fails any unmarked test that reaches the network).
@@ -63,8 +63,10 @@ worked examples; your evals live in your repo.
63
63
  GoldMapping(id=..., input=..., expected=..., group=...), name=..., version=...)` reads them as written -- the header
64
64
  found under a title, blank rows skipped, values kept exactly, each item's place recorded -- and refuses anything
65
65
  that would make the gold wrong (a missing column, a row without its id, a duplicate id) with where it is. Map
66
- `group` to the source document so splits stay leakage-safe. A gold set is `local_only` by default: client data
67
- never leaves the machine.
66
+ `group` to the source document so splits stay leakage-safe. A workbook with several sheets: name one with
67
+ `sheet=`. Say how the gold was made with `provenance=` (`hand`, `silver` or `generated`; or a per-row column through
68
+ `GoldMapping(provenance=...)`), so silver is never conflated with gold. A gold set is `local_only` by default:
69
+ client data never leaves the machine.
68
70
  - **Gold stays local when the corpus is restrictively licensed** (CUAD/ACORD-derived gold lives under the
69
71
  gitignored `data/eval/`); commit the builder and the scorer, never the data.
70
72
 
@@ -145,10 +147,10 @@ or a plain function, which runs off the event loop) on every item, `repeats` tim
145
147
  answer), scores each repeat, and passes a scorer only if it passes on every repeat (its gate is the worst repeat;
146
148
  `per_repeat_gate` lists each). `run_eval` is the synchronous form; inside a web backend, await `arun_eval` as a
147
149
  background job. What is still yours:
148
- - **Isolate the capability under test**: the task calls ONE capability, injected (a seam / `extract_override` / an
149
- injected `retrieve`), so the eval measures it, not the whole pipeline. Invoke production code THROUGH the
150
+ - **Isolate the capability under test**: the task calls ONE capability, injected (a seam, such as the reference pack's
151
+ `extract_override` or an injected `retrieve`), so the eval measures it, not the whole pipeline. Invoke production code THROUGH the
150
152
  capability layer (`ainvoke_subgraph`/`ainvoke_model`), never a hand-built copy. Score the **shipped request** (the
151
- exact prompt/question builder production uses, e.g. `judge_request`), not a copy of it re-typed in the eval.
153
+ exact prompt/question builder production uses, e.g. the reference pack's `judge_request`), not a copy of it re-typed in the eval.
152
154
  - **Repeatability for non-deterministic models.** Use `repeats` and read `report.flips`; flips cluster near the
153
155
  threshold and usually mean the QUESTION is ambiguous: fix the question, do not vote it away (Jev flipped 5/181
154
156
  answers at scores 0.47-0.56; temperature/seed did not help, majority voting barely helped, rewriting the ambiguous
@@ -160,7 +162,7 @@ background job. What is still yours:
160
162
  - **Keep the report.** `report.model_dump_json()` holds every item's outputs; save it next to the gold version.
161
163
  `rescore_eval(report, gold, scorers)` re-scores it with new thresholds, a new scorer or a corrected gold, free. An
162
164
  eval kept only as aggregate numbers can never be checked again.
163
- - **Pre-flight paid bulk** (>~50 paid calls): print the exact count + cost and wait (`warn-before-bulk` rule).
165
+ - **Pre-flight paid bulk** (>~50 paid calls): print the exact count + cost and wait for approval before launching.
164
166
  - **Hermetic tests never touch the network**: `tests/conftest.py` fails a test that resolves a non-local host unless
165
167
  it carries a live marker (`model`, `store`, ...). Live evals run as scripts (outside pytest) or carry a live
166
168
  marker.
@@ -25,9 +25,10 @@ you can fine-tune. In RAG_Wright a decision model is wired as a `kind="model"` c
25
25
 
26
26
  **Swapping Jev for Laya is config, but not free.** `DECISION_PROFILES` has only Jev entries (`jev-1.13`, the
27
27
  default, and `jev-latest`). A Laya swap needs (1) a server that speaks the Decisions API (POST
28
- `{model, state, questions}`, return `{answers: {<id>: {type, noul|choice|score}}}`), and (2) a `DecisionModelProfile`
29
- entry in `DECISION_PROFILES` with its `endpoint`, `served_model_id` and `api_key_env` (an unknown id falls back to
30
- the OpenRouter endpoint). Then select it with `RAG_DECISION_MODEL=<profile id>`;
28
+ `{model, state, questions}`, return `{answers: {<id>: {type, noul|choice|score}}}`), and (2) its profile, registered
29
+ at startup from your product: `register_decision_profile(DecisionModelProfile(model_id="laya-onprem",
30
+ served_model_id=..., endpoint=..., api_key_env=...))`, both on `rag_wright.api` (an unregistered id falls back to the
31
+ OpenRouter endpoint). Then select it with `RAG_DECISION_MODEL=<profile id>` (or the `jev_decision` input `model`);
31
32
  `RAG_JEV_TIMEOUT_S` overrides the request timeout.
32
33
 
33
34
  **Batch the questions.** One call carries one `state` and many keyed questions, so ask everything about a unit in
@@ -68,7 +69,7 @@ server you swap in.
68
69
  ## Data — the JSONL schema + criteria (the differentiator)
69
70
  One JSONL line per case (`research/scripts/finetune_single_device.py` reads this exact shape):
70
71
  ```
71
- {"state": "<clause text>",
72
+ {"state": "<unit text>",
72
73
  "questions": {"<dim>": {"type":"choice","instructions":"<the question>","criteria":{"<value>":"<description>", ...}}},
73
74
  "gold": {"<dim>": {"probabilities": {"<value>": <p>, ...}, "label": "<value>"}}}
74
75
  ```
@@ -78,7 +79,7 @@ One JSONL line per case (`research/scripts/finetune_single_device.py` reads this
78
79
  - **`gold` is a DISTRIBUTION (soft targets), not a hard label** — RLCD trains on the teacher's probability per option.
79
80
  One-hot (`{gold:1.0, other:0.0}`) works and is the pragmatic start; true soft targets (teacher per-option probs)
80
81
  are the design-intended enhancement.
81
- - Reuse your existing **contract-disjoint, symmetric splits** so floors are directly comparable to SetFit. Silver
82
+ - Reuse your existing **document-disjoint, symmetric splits** so floors are directly comparable to SetFit. Silver
82
83
  goes in TRAIN only; val/test stay gold.
83
84
 
84
85
  ## Fine-tune — single T4, RLCD, calibration built in
@@ -116,11 +117,12 @@ One JSONL line per case (`research/scripts/finetune_single_device.py` reads this
116
117
  the model from the engine (never a hardcoded/stale id; bulk teacher labeling on Modal Qwen, not OpenRouter), load
117
118
  `.env` by EXPLICIT path from an out-of-repo script, SMOKE one item before the fan-out, and stream X/N to a log you
118
119
  actively monitor. Those exact mistakes cost runs on 2026-10-04.
119
- - **Modal harness = reuse the [[setfit]] hardened pattern:** `.uv_pip_install("laya")` + `.add_local_file` the
120
+ - **Modal harness = follow the [[setfit]] hardened pattern** (the pattern described there; that harness's code is
121
+ not shipped): `.uv_pip_install("laya")` + `.add_local_file` the
120
122
  finetune script; launcher BLOCKS on `.get()` per spawn (no spawn-and-return), stamps + verifies a `data_sha`,
121
123
  writes a manifest, streams X/N; snapshot keepers server-side to a `/checkpoints/<name>` path (a small copy fn) —
122
124
  the laya volume has no built-in snapshot, add one. Never lose a fine-tune.
123
- - **ACCOUNT CONTAINER CAP = 10 (fzaidi2014).** Spawning more than 10 fine-tunes at once does NOT run them all —
125
+ - **ACCOUNT CONTAINER CAP (10 on the engine authors' account; check your workspace's).** Spawning more than 10 fine-tunes at once does NOT run them all —
124
126
  Modal queues the rest and runs ~10 at a time (correct, but ~N/10 waves of wall-clock, and a "why only 10 running?"
125
127
  surprise). Size a `groupbake`/dimbatch fan-out to ≤10 in flight (chunk into waves + gather between), or state the
126
128
  wave count honestly. This is a DIFFERENT knob from the vLLM `max_containers=1` + `@modal.concurrent` batching in the
@@ -46,7 +46,13 @@ config = EngineConfig(store=..., models={"general": server.model_id}) # or any
46
46
  stop_model_server("acme-qwen") # only to retire it: stopping discards the snapshots (see "Cold start & cost")
47
47
  ```
48
48
 
49
- `amodel_server(spec)` reconnects to a server deployed earlier (a restart, another process) without redeploying.
49
+ `server.model_id` is `qwen3.8-27b-modal@<name>`: a copy of the `qwen3.8-27b-modal` profile pointed at this server
50
+ (reasoning on for structured calls and agent turns, off for free text). Use that id, never `VLLM_BASE_URL`. A
51
+ reasoning-off structured pick (bulk closed-vocab labeling) has no `@<name>` variant: point `VLLM_BASE_URL` at
52
+ `server.base_url` and use the `qwen3.8-27b-modal-nothink` profile.
53
+ `amodel_server(spec)` reconnects to a server deployed earlier (a restart, another process) without redeploying;
54
+ `await_model_server(server, timeout_s=...)` waits for readiness; `amodel_server_status(spec)` looks without waking it
55
+ (`deployed`, `running` (a container bills), `healthy`, `weights_cached`); `astop_model_server(name)` is the async stop.
50
56
  The API key comes from the variable `ModelServerSpec.api_key_env` names (default `VLLM_API_KEY`); there is no default
51
57
  key, so set a real one. Needs `rag-wright[modal]` and a Modal login. One app per server name: different names give
52
58
  different servers (and URLs), for example one per tenant.
@@ -66,8 +72,9 @@ The script refuses to deploy without `VLLM_API_KEY`: Modal's web endpoint is pub
66
72
  `qwen3.8-27b-modal` routes there (the seam also refuses an unset key). When to stop it: "Cold start & cost" below.
67
73
 
68
74
  **The engine does NOT reach Modal by default.** Every role's default is `_PRODUCT_LLM = "qwen3.8-27b-modal-or"`,
69
- the same model routed through OpenRouter (a Modal cold start can still take minutes when Modal builds a snapshot). To send calls to the Modal server, set
70
- `RAG_MODEL_ALL=qwen3.8-27b-modal` (all roles), a per-role `RAG_MODEL_<ROLE>`, or `EngineConfig.models`. For bulk
75
+ the same model routed through OpenRouter (a Modal cold start can still take minutes when Modal builds a snapshot). To send calls to the Modal server, put
76
+ `server.model_id` in `EngineConfig.models` (the API route), or on the raw route set `RAG_MODEL_ALL=qwen3.8-27b-modal`
77
+ (all roles) or a per-role `RAG_MODEL_<ROLE>`. For bulk
71
78
  closed-vocab labeling, the reasoning-off profile `qwen3.8-27b-modal-nothink` exists (opt-in; see the reasoning
72
79
  caveat below). `VISION_OCR` now defaults to the product LLM too, but image inputs through the Modal vLLM server are
73
80
  UNVERIFIED (the serve script passes no multimodal flags): confirm an image call works before pointing
@@ -130,7 +137,7 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
130
137
  - **When to stop it -- one rule (EV-6; it used to contradict the line above).** The A100 is billed only while a
131
138
  container runs; the server scales to zero after 10 idle minutes (`scaledown_window=600`, no warm minimum) and then
132
139
  costs nothing and KEEPS its snapshots, so the next request is back in ~13 s. `modal app stop` saves at most those
133
- 10 minutes and makes the next deploy pay a 9-15 min snapshot-building boot (2026-10-12: a stop after a failed smoke
140
+ 10 minutes and makes the next deploy pay a snapshot-building boot (usually 4-9 min; 15 min seen once) (2026-10-12: a stop after a failed smoke
134
141
  run, then a redeploy, cost a 911 s boot).
135
142
  1. **Deploy once per server name**; reuse the name (a new name builds new snapshots).
136
143
  2. **Build the consumer first** (the bulk / label / eval script, its smoke test, its progress logging) while no
@@ -138,8 +145,8 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
138
145
  a smoke-warmed A100 sat idle ~20 min while unrelated work ran).
139
146
  3. **Between runs, and when you are done, let it scale to zero.** Never stop it between runs; a script's error
140
147
  path must not stop it either when a fix-and-rerun is likely.
141
- 4. **Check it reached zero**: `modal app list` shows the app `deployed` with 0 tasks about 10 minutes after the
142
- last call. If tasks remain past the window, find out why (that is the 2026-10-04 burn) and stop it.
148
+ 4. **Check it reached zero**: `amodel_server_status(spec).running` is False (or `modal app list` shows the app
149
+ `deployed` with 0 tasks) about 10 minutes after the last call. If tasks remain past the window, find out why (that is the 2026-10-04 burn) and stop it.
143
150
  5. **Stop (`modal app stop <app> --yes`, or `stop_model_server`) only to retire a server**: you will not use it
144
151
  for a long time and do not want its endpoint up, or you are replacing its deployment. Expect the next deploy to
145
152
  rebuild the snapshots.
@@ -219,11 +219,14 @@ after the 21-classifier runs — each one cost real time and each is avoidable w
219
219
  order before you fan out any bulk job.
220
220
 
221
221
  1. **Resolve the model from the engine, never hardcode a model id.** A hardcoded id rots: `ibm-granite/granite-4.1-8b`
222
- now 404s on OpenRouter ("No endpoints found"). Use the engine resolver (`models.profiles.model_for(ModelRole.<ROLE>)`,
222
+ now 404s on OpenRouter ("No endpoints found"). Use the engine resolver (`rag_wright.pack_sdk.model_for(ModelRole.<ROLE>)`,
223
223
  or `ws.model_id(role)` on a workspace; the model-profile seam) so the id and backend come from config, and **confirm it with a one-call smoke before any
224
224
  bulk run**. Bulk teacher labeling runs on **self-hosted Qwen on Modal** (`qwen-vllm-modal` skill + ADR-0110), NOT
225
- OpenRouter (flat-GPU = the warn-before-bulk rule); reasoning ON for label fidelity; client concurrency ≤16; raise
226
- the structured timeout for reasoning-ON bulk; `modal app stop` when done.
225
+ OpenRouter (a flat GPU rate, not a per-call bill: before more than ~50 paid calls, print the exact count and cost
226
+ and wait for approval); reasoning ON for label fidelity; client concurrency below the server's `max_num_seqs`
227
+ (counting every concurrent run); raise the structured timeout for reasoning-ON bulk; between runs let the server
228
+ scale to zero, and stop it only to retire it (`qwen-vllm-modal`, "Cold start & cost": a stop discards its
229
+ snapshots).
227
230
  2. **Load `.env` by EXPLICIT path in any script run from outside the repo root** (a scratchpad / one-off script).
228
231
  `load_dotenv()` with no path searches the CALLING SCRIPT's directory, so a script in `/tmp/...` silently misses
229
232
  the project `.env` → `KeyError` or wrong creds. Pass the repo `.env` path (`load_dotenv("/abs/repo/.env")`) or
@@ -257,7 +260,7 @@ Concrete tool gotchas from a real run; following them saves real time.
257
260
  per-run progress log on the volume. A run whose app shows `stopped / 0 tasks` seconds after launch did NOT train —
258
261
  confirm via the platform task count and the registry, not by assuming.
259
262
  - **Mind the ACCOUNT CONTAINER CAP when sizing the fan-out.** A workspace has a max concurrent-container count (10 on
260
- the fzaidi2014 account). Spawning more than that does NOT run them all at once — the excess QUEUES and runs in waves
263
+ the engine authors' account; check your own workspace's limit). Spawning more than that does NOT run them all at once — the excess QUEUES and runs in waves
261
264
  (correct + no double-spend, but ~N/cap× the wall-clock, and only `cap` show as running). Size the wave to ≤ the cap
262
265
  (chunk spawns + gather between waves) or report the wave count honestly. Distinct from any in-container concurrency.
263
266
  - **When multiple entrypoints exist, name the one to run** (`script.py::entrypoint`) and use the FULL script path;
@@ -17,14 +17,18 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
17
17
  - **You own your capabilities.** The engine's catalog starts empty; your seam registers everything you invoke, at
18
18
  startup (section 1). The contract/compliance capabilities are the engine's reference pack, not the engine.
19
19
  - **Product → Engine, one way.** Never fork, edit, or reach into engine internals. If the engine needs a change,
20
- flag it upstream — don't work around it here.
20
+ write an engine request (section 6) — don't work around it here: a product-side patch hides the defect from
21
+ every other product built on the engine.
22
+ - **Your product owns its store and its data; the engine mediates access.** Your product runs its own ArcadeDB and
23
+ has no ArcadeDB client of its own (section 1).
21
24
  - **The public surface is `rag_wright.api`; a pack also uses `rag_wright.pack_sdk`.** From `rag_wright.api` import
22
- `EngineConfig`/`StoreConfig` (`StoreConfig.from_env()` reads `ARCADEDB_*`)/`open_workspace`, the invokers
25
+ `EngineConfig`/`StoreConfig` (`StoreConfig.from_env()` reads `ARCADEDB_*`)/`open_workspace`
26
+ (`temporary_workspace`/`drop_workspace` for disposable and removed databases), the invokers
23
27
  (`ainvoke_subgraph`/`invoke_model`/`ainvoke_model`), discovery (`capability_index`/`discover`), the KG accessors
24
28
  (`kg_read` with `key_range`, `kg_write`, `kg_edges` with `NOT_NULL`, `kg_count`/`kg_delete`/`kg_update`,
25
29
  `entities_by_name`, `span_positions`), `pack_store(ws, cls)` (build your pack's store extension over the
26
30
  workspace's store; the store itself stays private), metering and tracing (`measure_usage`, `record_usage`,
27
- `traced_run`/`traced_step`), answers (`agenerate_answer`, `ajudge_spans` with `EvidenceItem`/`Condition`, the
31
+ `traced_run`/`traced_step`), `agent_chat_model` (an agent's chat model from an engine model id), answers (`agenerate_answer`, `ajudge_spans` with `EvidenceItem`/`Condition`, the
28
32
  models from the workspace's roles, your domain wording via `guidance=`), `ModelRole`, pack loading
29
33
  (`register_capability`/`load_pack`/`engine_capabilities`/`load_reference_pack`), the document helpers
30
34
  (`parse_document`/`aparse_document`, `parse_document_bytes`/`aparse_document_bytes` for uploads,
@@ -47,13 +51,19 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
47
51
  ## 1. Install
48
52
 
49
53
  ```sh
50
- uv add 'rag-wright>=0.3.0' # released-product mode (PyPI); see below for local co-development
54
+ uv add 'rag-wright>=0.8.0' # released-product mode (PyPI); see below for local co-development
51
55
  ```
52
56
 
53
57
  Stand up the runtime prerequisites you provide: ArcadeDB (the store), a model provider (OpenRouter or self-hosted
54
58
  vLLM), and — only for NER — `uv add 'rag-wright[ner]'` + `uv run python -m spacy download en_core_web_sm`.
55
59
  Read the engine's **installation** + **configuration** docs for the exact `.env` and `EngineConfig` fields.
56
60
 
61
+ **ArcadeDB is your product's, all of it.** Run your own instance (installation, "Run your product's ArcadeDB"): its
62
+ own container name, its own host ports (a pair no other instance on the machine uses; the engine's test instance
63
+ uses 2480/2424), its data directory in your repo (gitignored) or on storage you manage. Make your settings default
64
+ to your own port, so an unset variable cannot reach another instance and appear to work. Your product code has no
65
+ ArcadeDB client: every read and write goes through `rag_wright.api`.
66
+
57
67
  **Local co-development** (engine and product developed together on one machine): keep the floor and add an editable
58
68
  source so engine changes are picked up immediately: `[tool.uv.sources] rag-wright = { path = "<engine checkout>",
59
69
  editable = true }`. Check against the published release with `uv sync --no-sources` (never with `--locked`; never
@@ -78,6 +88,18 @@ per implementation chosen per tenant in your code.
78
88
  (`use_workspace_models(ws)` for a call that does not). To change a tenant's config, open its corpus again with the
79
89
  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
90
 
91
+ **Databases.** `open_workspace(config, corpus=...)` creates a missing database by default (and logs
92
+ `created database '<name>'`); where the database must already exist (a read path, a query service, an explicit
93
+ override), pass `create=False`, which raises `LookupError` naming the databases that do exist instead of opening an
94
+ empty graph. A probe, measurement or test that needs its own database uses
95
+ `with temporary_workspace(config, prefix="probe") as ws:`; the database is dropped when the block exits, also when it
96
+ raises. Remove a database with `drop_workspace(config, corpus=...)` (it refuses a blank name and cannot be undone);
97
+ never delete its files or call the ArcadeDB server yourself.
98
+
99
+ **Hermetic tests stub the door the code opens.** Your code reaches the store through `open_workspace`; a fast test
100
+ stubs that. A stub on an entry point the code no longer calls lets the test reach a real store and create a database
101
+ on every run, without failing.
102
+
81
103
  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.
82
104
 
83
105
  ## 2. Ground before you write (graphify)
@@ -135,7 +157,25 @@ Work the domain-adaptation guide, grounding each engine call (step 2) and writin
135
157
  `build_ingestion(document_hook=...)`, which runs once per document after its records are written; a
136
158
  first-class resolver config is still engine gap G1. → `kg-construction.md`, `entity-resolution.md`.
137
159
  6. **Build the product seam** — your thin layer over the engine API + registered caps (tenancy, orchestration,
138
- the product tool surface). Wrap `open_workspace`/the invokers/`kg_read`/`measure_usage`.
160
+ the product tool surface). Wrap `open_workspace`/the invokers/`kg_read`/`measure_usage`. Classify each operation
161
+ before building it: deterministic (the backend calls a pre-wired workflow), agent-fronted (a fixed workflow
162
+ reached through an agent), or composed by a model at run time; build each workflow once, as a tool that both the
163
+ UI and an agent call, and never put a model in the path of an unambiguous button click.
164
+
165
+ **PDFs.** Call the parse and ingest functions concurrently as you like: the engine parses one PDF at a time inside
166
+ the process (a crash in the PDF library otherwise, engine ADR-0138) and keeps everything after the parse concurrent.
167
+ Count an upload's pages with `pdf_page_count(data)`, which reads under the same lock; product code never imports the
168
+ PDF library itself.
169
+
170
+ **Agents.** Build a product agent (Deep Agents or LangGraph) on the model the engine gives it, by engine model id:
171
+ `create_deep_agent(model=agent_chat_model("<model id>", max_retries=0), tools=[...])` (`None` takes the `GENERAL`
172
+ role's model). The profile decides endpoint, key and the agent turn's reasoning flag, so your code names no model,
173
+ vendor or vendor flag; every call, a subagent's included, is recorded into `measure_usage()` with the provider's
174
+ real cost and traced when tracing is on. The generic harness substrate (the loop, error levels and deadlines,
175
+ retries, interrupts and human-in-the-loop, replay on resume, memory practice, metering) is engine scope (engine
176
+ ADR-0139, PS-32): it arrives as a third public tier with the `building-an-agent-harness` skill. Until your installed
177
+ engine has it, keep agents thin and never write a substrate of your own; your product keeps its agents, tools,
178
+ prompts, skills, guardrails and decision models.
139
179
 
140
180
  **Using a self-hosted model (Qwen on Modal).** Deploy it from the engine and use its model id like any model:
141
181
  `server = await adeploy_model_server(ModelServerSpec(name="<app>", max_num_seqs=<concurrency target>))` (the locked
@@ -181,8 +221,15 @@ engine PR:
181
221
 
182
222
  - Depend on a floor (`rag-wright>=X.Y.Z`, never `==`); `uv.lock` holds the exact version. Dependabot (uv ecosystem)
183
223
  opens a PR per new release; your CI — with a LIVE engine-seam test — gates it.
184
- - Found an engine bug? Fix it **in the engine repo** (PR titled `fix(scope): …` so it lands in the next release),
185
- not by patching around it in the product.
224
+ - Found an engine bug, or need something the engine does not have? Write an **engine request** in your repo,
225
+ `docs/engine-requests/YYYY-MM-DD-<slug>.md`: what you found, the evidence (a reproduction, a measurement, the
226
+ exact error), what you want, and what you do meanwhile. The engine fixes it in its own repo (a `fix(scope): …`
227
+ commit, so the next release carries it); never patch around it in the product. Read the engine's
228
+ `docs/domain-adaptation/_engine-gaps.md` first: the gap may be known.
229
+ - An engine symbol on the engine's main branch but not yet released is reached through the editable path
230
+ (local co-development), never through an internal import; move your floor only for a released symbol.
231
+ - Keep a committed snapshot of the installed `rag_wright.api.__all__` and a test that compares them: a change to the
232
+ surface you build on is then named the day it arrives, and any other engine change needs nothing from you.
186
233
  - Need that fix before the next release? Temporarily pin
187
234
  `[tool.uv.sources] rag-wright = { git = "https://github.com/fzaidi-dai/RAG_Wright", rev = "<merged-sha>" }` and
188
235
  `uv lock`; drop the override when the release containing it arrives.
@@ -214,3 +261,7 @@ link). Link these, and any product-building skills another repo writes for produ
214
261
  domain instead of authoring your own `.ttl`.
215
262
  - Hand-constructing a capability's logic instead of invoking it by name through the invoker.
216
263
  - Skipping the eval: write it before the implementation.
264
+ - Patching around an engine defect in product code instead of writing the engine request.
265
+ - Giving product code an ArcadeDB client, pointing it at another product's or the engine's instance, or deleting a
266
+ database's files by hand (`drop_workspace` removes one; `temporary_workspace` keeps scratch from piling up).
267
+ - Naming a model, vendor or vendor flag in product code; writing your own agent harness substrate.
@@ -6,8 +6,9 @@ OPENROUTER_API_KEY=
6
6
  # OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
7
7
 
8
8
  # --- ArcadeDB (single store: hybrid retrieval index + knowledge graph) ---
9
- # Run locally with Docker (see docs/ArcadeDB_Local.md). The password below is the container's
10
- # root password; set the same value here and in the `docker run` JAVA_OPTS.
9
+ # Working on the engine: its own test instance, run locally with Docker (see docs/ArcadeDB_Local.md).
10
+ # A product sets these in its own .env, pointing at its own instance (docs/installation.md).
11
+ # The password below is the container's root password; set the same value here and in the `docker run` JAVA_OPTS.
11
12
  ARCADEDB_HOST=localhost
12
13
  ARCADEDB_PORT=2480
13
14
  ARCADEDB_USER=root
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.9.0"
3
+ }
@@ -4,6 +4,15 @@ 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.9.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.8.0...0.9.0) (2026-10-13)
8
+
9
+
10
+ ### Features
11
+
12
+ * **PS-36:** agent_chat_model, an agent's chat model from a model profile, metered and traced ([f1af92a](https://github.com/fzaidi-dai/RAG_Wright/commit/f1af92a848c2de7dd02cf1d99ce61cd3df8d20d9))
13
+ * **PS-37:** drop_workspace and temporary_workspace, so a product removes the databases it creates ([44c0c78](https://github.com/fzaidi-dai/RAG_Wright/commit/44c0c78b0b8dd02724920391a564f3cda006c41c))
14
+ * **PS-38:** close the public-surface gaps a new product hits (G12, G14, G22, G23) and require ARCADEDB_PORT ([0d0c1f1](https://github.com/fzaidi-dai/RAG_Wright/commit/0d0c1f16b95bc763dec348a59965de2e8b4a22c9))
15
+
7
16
  ## [0.8.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.7.0...0.8.0) (2026-10-12)
8
17
 
9
18
 
@@ -55,7 +55,7 @@ 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-12): the evals workstream is COMPLETE; `rag-wright` 0.8.0 is ready to release** (ledger
58
+ > **CURRENT STATE (2026-10-12): the evals workstream is COMPLETE and RELEASED as `rag-wright` 0.8.0** (PyPI + GitHub release `0.8.0`; ledger
59
59
  > `docs/specs/evals/plan.md`, EV-0..EV-6; EV-7 optional): gold sets from experts' files, a scorer per capability kind,
60
60
  > the runner `arun_eval` with an optional Langfuse backend, `EvalReport`, `aevaluate_ingestion`; the reference is
61
61
  > `docs/evals.md`. With it in 0.8.0: PS-24 (async calls on every event loop, ADR-0135), PS-25 (the release PR bumps
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.8.0
3
+ Version: 0.9.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
@@ -132,8 +132,8 @@ from git or a local path to get them (see [`docs/installation.md`](docs/installa
132
132
  0.1.0 migrates with the
133
133
  [breaking-changes record](docs/specs/ingestion-hooks/ing8-breaking-changes.md).
134
134
 
135
- Runtime prerequisites: **ArcadeDB** (the store — run it locally with Docker, see
136
- [`docs/installation.md`](docs/installation.md)); **a model provider** (an OpenRouter key by default, or a self-hosted
135
+ Runtime prerequisites: **ArcadeDB** (the store: your product runs its own instance and owns its data, including
136
+ the knowledge graph; see [`docs/installation.md`](docs/installation.md)); **a model provider** (an OpenRouter key by default, or a self-hosted
137
137
  endpoint); and, only for NER (named entity recognition), the optional extra `uv add 'rag-wright[ner]'` +
138
138
  `uv run python -m spacy download en_core_web_sm`.
139
139
 
@@ -76,8 +76,8 @@ from git or a local path to get them (see [`docs/installation.md`](docs/installa
76
76
  0.1.0 migrates with the
77
77
  [breaking-changes record](docs/specs/ingestion-hooks/ing8-breaking-changes.md).
78
78
 
79
- Runtime prerequisites: **ArcadeDB** (the store — run it locally with Docker, see
80
- [`docs/installation.md`](docs/installation.md)); **a model provider** (an OpenRouter key by default, or a self-hosted
79
+ Runtime prerequisites: **ArcadeDB** (the store: your product runs its own instance and owns its data, including
80
+ the knowledge graph; see [`docs/installation.md`](docs/installation.md)); **a model provider** (an OpenRouter key by default, or a self-hosted
81
81
  endpoint); and, only for NER (named entity recognition), the optional extra `uv add 'rag-wright[ner]'` +
82
82
  `uv run python -m spacy download en_core_web_sm`.
83
83
 
@@ -1,8 +1,15 @@
1
- # Running ArcadeDB locally (T13/T14)
1
+ # ArcadeDB for engine development
2
2
 
3
- The single store (FR-S.1) runs as a local Docker container during development, pinned to **ArcadeDB 26.7.1** (the
4
- latest stable tag; `:latest` resolves to a moving `-SNAPSHOT` dev build, which we deliberately do not use). This is the version T13's schema and the `vector.fuse`
5
- de-risk are validated on. Sparse vector index and server-side hybrid retrieval exist since 26.5.1.
3
+ **This page is for working on the engine itself.** A product runs its own ArcadeDB instance and owns its data,
4
+ including the knowledge graph: see [Run your product's ArcadeDB](installation.md#run-your-products-arcadedb-the-single-store).
5
+ The instance below is the engine developer's own: it holds the databases the engine's live store tests
6
+ (`pytest -m store`) and its evals build, on public or locally acquired evaluation corpora. No product points at it,
7
+ and no product's data goes in it.
8
+
9
+ It runs as a local Docker container, pinned to **ArcadeDB 26.7.1** (the latest stable tag; `:latest` resolves to a
10
+ moving `-SNAPSHOT` dev build, which we deliberately do not use). This is the version the engine's schema and the
11
+ `vector.fuse` hybrid retrieval are validated on. Sparse vector index and server-side hybrid retrieval exist since
12
+ 26.5.1.
6
13
 
7
14
  ## Start
8
15
 
@@ -16,9 +23,10 @@ docker run -d --name arcadedb-ragwright \
16
23
  ```
17
24
 
18
25
  - Port `2480` is the HTTP API the `arcadedb_python` client uses; `2424` is the binary protocol.
19
- - Data persists under the gitignored `data/arcadedb/` (SPEC data directory; never committed).
26
+ - Data persists under this checkout's gitignored `data/arcadedb/`: engine test and eval databases only, never
27
+ committed.
20
28
  - `ARCADEDB_OPTS_MEMORY` sets the JVM heap, the store's capacity limit (the image default is `-Xms2G -Xmx2G`, which
21
- ran out of memory part-way through the full CUAD knowledge graph). It is read at container start, so changing it
29
+ ran out of memory part-way through the full CUAD evaluation knowledge graph). It is read at container start, so changing it
22
30
  means recreating the container.
23
31
  - Set the same password in `.env` as `ARCADEDB_PASSWORD` (with `ARCADEDB_HOST=localhost`,
24
32
  `ARCADEDB_PORT=2480`, `ARCADEDB_USER=root`, `ARCADEDB_DATABASE=rag_wright`). `.env` is gitignored.
@@ -58,5 +66,5 @@ A database created before the `Span` field rename (`contract_id`, `function`, `f
58
66
 
59
67
  ```bash
60
68
  docker stop arcadedb-ragwright && docker rm arcadedb-ragwright # stop (data persists in the volume)
61
- rm -rf data/arcadedb # wipe all local databases
69
+ rm -rf data/arcadedb # wipe the engine's local test databases
62
70
  ```
@@ -0,0 +1,95 @@
1
+ # ADR-0139: The agent harness substrate is engine scope
2
+
3
+ **Status:** accepted · **Date:** 2026-10-12 · **Supersedes in part:** ADR-0052 (the placement of the agent harness
4
+ in the product) · **Amends later:** ADR-0041 (an `agent` capability kind, PS-33) · **Related:** ADR-0128 (the public
5
+ tiers), ADR-0134 (skill placement), ADR-0015 (the RLM Deep Agent), RuleWright's request of 2026-10-12 and its
6
+ ADR-0021 amendment
7
+
8
+ ## Context
9
+
10
+ ADR-0052 put the agent harness in the product: each product would hand-build its orchestration. RuleWright has
11
+ since built one on Deep Agents and LangGraph, and measured it: 32 modules, 7,514 lines. Only three import anything
12
+ from the product, and 21 name no domain concept. What it found expensive is domain-free: the loop, error levels and
13
+ deadlines, retry composition, human-in-the-loop and the interrupt protocol, replay on resume, chat interaction,
14
+ per-layer context management, memory practice (including cross-tenant namespaces), metering, bounded grading,
15
+ repeat suppression and the decision registry. Each of those cost it a real defect to get right. What makes the
16
+ product what it is lies elsewhere: its tools and the capabilities it gives each agent, the guardrails that read
17
+ content, its prompts and skills, its decision models.
18
+
19
+ Two more products on the engine are planned, and each needs a harness. Left in the product, the substrate would be
20
+ written three times and drift three ways. Since ADR-0052 the engine has also been de-domained into a substrate for
21
+ building domain products (ADR-0124, ADR-0128); driving its capabilities with agents is part of that job.
22
+
23
+ A second reason surfaced on review. `create_deep_agent(...)` returns a LangGraph `CompiledStateGraph`, the same type
24
+ as the engine's workflow subgraphs, and the capability invoker resolves any `impl_ref` factory without knowing what
25
+ is behind it (`capabilities/invoke.py`). So a harness, customised for one job, can itself be registered as a
26
+ capability: an agentic capability beside the deterministic functions, the models and the workflow subgraphs. The
27
+ RLM capabilities already are this, built by hand (ADR-0015). Only the engine owns the capability layer and ARD, so
28
+ only the engine can make that a supported pattern.
29
+
30
+ ## Decision
31
+
32
+ 1. **The agent harness substrate moves into the engine**, as a third public tier, `rag_wright.harness`, beside
33
+ `rag_wright.api` (a product's seam) and `rag_wright.pack_sdk` (a pack's code).
34
+ 2. **The substrate is what exists, separated; it is not redesigned for products not yet built.** It is RuleWright's
35
+ working harness with its product parts removed. No protocol is added to serve a future product's needs; a
36
+ product customises the substrate through what the agent framework already provides (middleware, tools, prompts,
37
+ skills, subagents and plain functions), and a need it cannot meet that way is an engine request like any other.
38
+ 3. **RuleWright does the separation**, because the code and the analysis are in its repo. It moves the substrate
39
+ into a package that imports nothing from the product and names no domain concept, its product parts consume
40
+ that package, and it hands the package over. The engine then adopts it (PS-32): the harness imports engine
41
+ code only through `rag_wright.api`, no other engine module imports the harness (import contracts), the
42
+ domain-vocabulary guard covers it, and its deployment-specific dependencies (the Postgres checkpointer) sit in an
43
+ optional extra, `rag-wright[harness]`, so a plain engine install stays as it is.
44
+ 4. **The product keeps** its tools and operations, its agents and their roster, prompts and skills, the guardrails
45
+ that read content, its decision models, its tenancy model and its UI.
46
+ 5. **The blueprint ships with the code.** RuleWright's `building-an-agent-harness` skill moves into
47
+ `src/rag_wright/.agents/skills/` (ADR-0134), version-matched to the substrate it describes.
48
+ 6. **Agentic capabilities are a later, separate workstream (PS-33).** It adds an `agent` capability kind (amending
49
+ ADR-0041: invoked like a subgraph, but declared as non-deterministic, tool-using, possibly pausing for a human,
50
+ and spending against a budget), typed contracts at the boundary, interrupts across the capability boundary,
51
+ deadlines and budgets passed down nested agents, and a worked example on public data. Not started until agreed.
52
+
53
+ ## Consequences
54
+
55
+ - One substrate, fixed once, for every product's chat agent and later for agentic capabilities.
56
+ - The engine's support surface and public API grow; a harness change ships as an engine release. The tier may
57
+ change between minor releases until a second product uses it, and every change goes in that release's migration
58
+ guide.
59
+ - `deepagents`, `langgraph` and `langchain-quickjs`, until now used only by the parked RLM agent, move onto a
60
+ supported path. Their floors stay floors (ADR-0112). A product still declares its own floors for the agent
61
+ framework it calls directly (RuleWright's ADR-0021, decision 1).
62
+ - Publishing the substrate in the open core cannot be undone. It is accepted because the substrate is not where a
63
+ product's value lies; the product keeps its tools, guardrails, prompts, skills and decision models closed.
64
+
65
+ ## Alternatives considered
66
+
67
+ - **Each product writes its own** (ADR-0052 as it stood): the same expensive code three times, the same defects
68
+ rediscovered.
69
+ - **Wait for a second product's harness, then decide:** guarantees a second copy to merge later.
70
+ - **A separate open package, its own repo:** clean scope, but a second CI and release line and an engine-by-harness
71
+ compatibility matrix, every seam change becoming two releases; and agentic capabilities would still need the
72
+ capability layer, which is the engine's.
73
+ - **A private shared package:** right only if the harness were where a product's value lies; RuleWright's
74
+ measurement says it is not.
75
+
76
+ ## Correction, 2026-10-13
77
+
78
+ RuleWright re-measured its harness before starting the separation (its engine request
79
+ `2026-10-12-correction-to-the-harness-measurement.md`). The Context's figures were wrong: **13** modules import
80
+ something from the product (6 of them a domain package), not three; **18** name no domain concept once comments and
81
+ docstrings are stripped, not 21; **12 modules (2,193 lines) lift unchanged and 20 modules (5,321 lines) need work**,
82
+ so the separation is staged work, not three imports turned into protocols. A third axis, invisible to both of those
83
+ measurements, also keeps code product-shaped: deployment choice, vendor names and tenancy shape (a model id and an
84
+ `is_openrouter()` helper in code, a direct `psycopg` import, a `(customer, workspace)` memory namespace).
85
+
86
+ The decision is unchanged; its reasons did not rest on these figures. Two details of it are sharpened:
87
+
88
+ - **The substrate's seams are the agent framework's own types**, not new protocols: it accepts a LangGraph
89
+ checkpointer, a memory namespace prefix from the caller, and a chat model (or a model profile name), and names no
90
+ model, vendor, database driver or tenancy shape. The product builds the Postgres checkpointer and passes it in, so
91
+ **the engine needs no `rag-wright[harness]` Postgres extra** (Decision 3's extra is withdrawn).
92
+ - **PS-32's acceptance gains two checks:** RuleWright's third guard (deployment, vendor and tenancy shape) runs over
93
+ `rag_wright.harness` in the engine's suite, and the engine repeats all three measurements itself at handover.
94
+ Building an agent's chat model from a model profile, with tracing and usage metering, goes on `rag_wright.api`
95
+ first (PS-36), so the product's model code is deleted rather than moved.