rag-wright 0.11.0__tar.gz → 0.13.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 (1078) hide show
  1. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/building-an-agent-harness/SKILL.md +14 -3
  2. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +4 -0
  3. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
  4. {rag_wright-0.11.0/src/rag_wright/.agents → rag_wright-0.13.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +5 -2
  5. rag_wright-0.13.0/.release-please-manifest.json +3 -0
  6. {rag_wright-0.11.0 → rag_wright-0.13.0}/CHANGELOG.md +22 -0
  7. {rag_wright-0.11.0 → rag_wright-0.13.0}/CLAUDE.md +6 -1
  8. {rag_wright-0.11.0 → rag_wright-0.13.0}/PKG-INFO +3 -1
  9. {rag_wright-0.11.0 → rag_wright-0.13.0}/README.md +2 -0
  10. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/ArcadeDB_Local.md +1 -1
  11. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +11 -0
  12. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/api/README.md +35 -3
  13. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/api/harness.md +32 -32
  14. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/configuration.md +7 -1
  15. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/README.md +1 -1
  16. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/_engine-gaps.md +5 -1
  17. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/authoring-capabilities.md +4 -3
  18. rag_wright-0.13.0/docs/harness.md +268 -0
  19. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/installation.md +11 -4
  20. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/plan.md +6 -1
  21. rag_wright-0.13.0/docs/specs/public-surface/rulewright-migration-0.11.0.md +22 -0
  22. rag_wright-0.13.0/docs/specs/public-surface/rulewright-migration-0.12.0.md +39 -0
  23. {rag_wright-0.11.0 → rag_wright-0.13.0}/pyproject.toml +1 -1
  24. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/build_api_docs.py +2 -1
  25. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/build_api_docs.sh +3 -1
  26. rag_wright-0.13.0/scripts/build_harness_doc.py +134 -0
  27. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/migrate_span_fields.py +5 -6
  28. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +14 -3
  29. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +4 -0
  30. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
  31. {rag_wright-0.11.0/.claude → rag_wright-0.13.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +5 -2
  32. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/__init__.py +9 -5
  33. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/kg.py +34 -4
  34. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/workspace.py +22 -1
  35. rag_wright-0.13.0/src/rag_wright/capabilities/parse_audit.py +88 -0
  36. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/parsing.py +11 -6
  37. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/scan_quality.py +21 -7
  38. rag_wright-0.13.0/src/rag_wright/capabilities/span_search.py +102 -0
  39. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/accounting.py +12 -12
  40. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/agent.py +26 -27
  41. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/batch.py +4 -4
  42. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/clarify.py +7 -6
  43. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/confirm.py +5 -5
  44. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/decisions.py +37 -40
  45. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/definition.py +6 -2
  46. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/dispatch.py +4 -4
  47. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/errors.py +17 -17
  48. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/events.py +8 -8
  49. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/filesystem.py +12 -12
  50. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/grading.py +19 -19
  51. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/interpreter.py +21 -20
  52. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/memory.py +19 -18
  53. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/models.py +11 -11
  54. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/rules.py +21 -21
  55. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/runs.py +38 -39
  56. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/scope.py +9 -10
  57. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/seen.py +17 -19
  58. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/skills.py +10 -11
  59. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/thinking.py +7 -7
  60. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/tiers.py +47 -54
  61. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/tracing.py +2 -2
  62. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/withhold.py +10 -10
  63. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/workers.py +61 -33
  64. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/store/arcadedb.py +12 -18
  65. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/store/seam.py +35 -3
  66. rag_wright-0.13.0/tests/api/test_migrate_span_fields.py +67 -0
  67. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_api_docs_current.py +11 -0
  68. rag_wright-0.13.0/tests/capabilities/test_parse_audit.py +149 -0
  69. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_scan_quality.py +32 -0
  70. rag_wright-0.13.0/tests/capabilities/test_span_search.py +129 -0
  71. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_tiered_ocr.py +73 -0
  72. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_greenfield_conformance.py +60 -0
  73. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_genericity.py +44 -0
  74. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_span.py +16 -0
  75. rag_wright-0.13.0/tests/store/test_kg_range.py +64 -0
  76. {rag_wright-0.11.0 → rag_wright-0.13.0}/uv.lock +1 -1
  77. rag_wright-0.11.0/.release-please-manifest.json +0 -3
  78. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/settings.json +0 -0
  79. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  80. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
  81. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
  82. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  83. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/creating-evals/SKILL.md +0 -0
  84. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/laya/SKILL.md +0 -0
  85. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  86. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  87. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  88. {rag_wright-0.11.0 → rag_wright-0.13.0}/.claude/skills/setfit/SKILL.md +0 -0
  89. {rag_wright-0.11.0 → rag_wright-0.13.0}/.env.example +0 -0
  90. {rag_wright-0.11.0 → rag_wright-0.13.0}/.github/workflows/publish.yml +0 -0
  91. {rag_wright-0.11.0 → rag_wright-0.13.0}/.github/workflows/release-please.yml +0 -0
  92. {rag_wright-0.11.0 → rag_wright-0.13.0}/.gitignore +0 -0
  93. {rag_wright-0.11.0 → rag_wright-0.13.0}/LICENSE +0 -0
  94. {rag_wright-0.11.0 → rag_wright-0.13.0}/SPEC.md +0 -0
  95. {rag_wright-0.11.0 → rag_wright-0.13.0}/conftest.py +0 -0
  96. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  97. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/OBSERVABILITY.md +0 -0
  98. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  99. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  100. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  101. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  102. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0005-relational-golden-set.md +0 -0
  103. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0006-model-profile.md +0 -0
  104. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  105. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  106. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  107. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  108. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  109. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  110. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  111. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  112. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  113. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  114. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  115. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  116. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  117. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  118. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  119. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  120. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  121. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  122. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  123. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  124. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  125. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  126. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  127. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  128. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  129. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  130. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  131. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  132. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  133. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  134. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  135. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  136. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  137. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  138. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  139. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  140. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  141. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  142. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  143. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  144. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  145. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  146. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  147. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  148. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  149. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  150. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  151. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  152. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  153. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  154. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  155. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  156. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  157. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  158. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  159. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  160. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  161. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  162. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  163. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  164. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  165. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  166. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  167. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  168. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  169. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  170. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  171. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  172. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  173. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  174. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  175. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  176. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  177. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  178. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  179. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  180. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  181. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  182. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  183. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  184. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  185. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  186. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  187. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  188. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  189. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  190. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  191. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0095-span-page-provenance.md +0 -0
  192. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  193. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  194. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  195. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  196. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  197. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  198. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  199. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  200. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  201. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  202. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  203. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  204. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  205. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  206. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  207. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  208. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  209. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  210. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  211. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  212. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  213. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  214. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  215. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  216. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  217. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  218. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  219. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  220. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  221. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  222. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  223. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  224. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  225. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  226. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  227. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  228. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  229. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  230. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  231. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  232. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  233. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  234. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  235. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
  236. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/adr/README.md +0 -0
  237. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/api/pack_sdk.md +0 -0
  238. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  239. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/architecture.md +0 -0
  240. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/README.md +0 -0
  241. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  242. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  243. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  244. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  245. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  246. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  247. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  248. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  249. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  250. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  251. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  252. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  253. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  254. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  255. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  256. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  257. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  258. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  259. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  260. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  261. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  262. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  263. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  264. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  265. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  266. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  267. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  268. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  269. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  270. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  271. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  272. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  273. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  274. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  275. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  276. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  277. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  278. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  279. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  280. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  281. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  282. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  283. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  284. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  285. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  286. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  287. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  288. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  289. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  290. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  291. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  292. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  293. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  294. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  295. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  296. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  297. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  298. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  299. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  300. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  301. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  302. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/misc/.gitkeep +0 -0
  303. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  304. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/async-migration.md +0 -0
  305. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/demo_plan.md +0 -0
  306. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  307. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  308. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  309. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  310. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  311. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  312. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/concepts.md +0 -0
  313. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/contract_pipeline_explainer.md +0 -0
  314. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/corpus_ingest_recipe.md +0 -0
  315. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  316. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  317. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  318. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/kg-construction.md +0 -0
  319. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  320. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/classifier_model_ab.md +0 -0
  321. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/compliance_demo.md +0 -0
  322. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/compliance_gate_cc7.md +0 -0
  323. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  324. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  325. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/dg_model_ab.md +0 -0
  326. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/function_gate_recall.md +0 -0
  327. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  328. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  329. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/ocr_benchmark.md +0 -0
  330. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/prod1_readiness.md +0 -0
  331. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/prod2_readiness.md +0 -0
  332. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/query_side_model_ab.md +0 -0
  333. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  334. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/silver_provider_routing.md +0 -0
  335. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  336. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/evals.md +0 -0
  337. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/playbook.md +0 -0
  338. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/capability_profiles.md +0 -0
  339. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/contracts_product_roadmap.md +0 -0
  340. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/engine-api-migration-handoff.md +0 -0
  341. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/engine_async_api.md +0 -0
  342. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/new-domain-build-sequence.md +0 -0
  343. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/product/seam-adaptation-guide.md +0 -0
  344. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  345. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  346. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  347. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/proposals/ontology-induction.md +0 -0
  348. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/quickstart.md +0 -0
  349. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/reference-pack.md +0 -0
  350. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/releasing.md +0 -0
  351. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/engine-platform/SPEC.md +0 -0
  352. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/engine-platform/TASKS.md +0 -0
  353. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/engine-prep/plan.md +0 -0
  354. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/evals/plan.md +0 -0
  355. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  356. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  357. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  358. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  359. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
  360. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
  361. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  362. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  363. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  364. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  365. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  366. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  367. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
  368. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  369. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
  370. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/templates/product-starter/README.md +0 -0
  371. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/templates/product-starter/dependabot.yml +0 -0
  372. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/templates/product-starter/playbook.md.template +0 -0
  373. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  374. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  375. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  376. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  377. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  378. {rag_wright-0.11.0 → rag_wright-0.13.0}/docs/workspaces.md +0 -0
  379. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/__init__.py +0 -0
  380. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/acord.py +0 -0
  381. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/acord_retrieval.py +0 -0
  382. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/boundary_residue_gold.py +0 -0
  383. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/build_golden.py +0 -0
  384. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  385. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  386. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  387. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  388. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/condensed_pipeline.py +0 -0
  389. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/contract_parity_live.py +0 -0
  390. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/contractnli_judge.py +0 -0
  391. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/cuad_highlight.py +0 -0
  392. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/embedded_eval.py +0 -0
  393. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/full_pipeline_rerank.py +0 -0
  394. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/function_ceiling.py +0 -0
  395. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/function_property_rerank.py +0 -0
  396. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/function_rerank.py +0 -0
  397. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/gate1_chunker_ab.py +0 -0
  398. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/gate2_hybrid_rerank.py +0 -0
  399. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/golden/relational/set.json +0 -0
  400. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/golden.py +0 -0
  401. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/ground_discriminator_rerank.py +0 -0
  402. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/harness.py +0 -0
  403. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/ingestion_live_smoke.py +0 -0
  404. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/kg_primary.py +0 -0
  405. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/kg_property_rerank.py +0 -0
  406. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/listwise_rerank.py +0 -0
  407. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/multihop.py +0 -0
  408. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/nl_to_type.py +0 -0
  409. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/relational_eval.py +0 -0
  410. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/residual_decision_gold.py +0 -0
  411. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/segmenter_eval.py +0 -0
  412. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/semantic_judge_gold.py +0 -0
  413. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/test_acord.py +0 -0
  414. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/test_acord_retrieval.py +0 -0
  415. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/test_harness.py +0 -0
  416. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/test_multihop_set.py +0 -0
  417. {rag_wright-0.11.0 → rag_wright-0.13.0}/eval/unit_grouper_eval.py +0 -0
  418. {rag_wright-0.11.0 → rag_wright-0.13.0}/examples/model_server.py +0 -0
  419. {rag_wright-0.11.0 → rag_wright-0.13.0}/examples/quickstart.py +0 -0
  420. {rag_wright-0.11.0 → rag_wright-0.13.0}/plan.md +0 -0
  421. {rag_wright-0.11.0 → rag_wright-0.13.0}/release-please-config.json +0 -0
  422. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ab_model_overlap.py +0 -0
  423. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acord_unify.py +0 -0
  424. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_acord.py +0 -0
  425. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_cuad.py +0 -0
  426. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_ecfr.py +0 -0
  427. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_edgar.py +0 -0
  428. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_ftc_255.py +0 -0
  429. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/acquire_prod1_corpus.py +0 -0
  430. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/audit_reclass_flips.py +0 -0
  431. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/author_leg_a_silver_key.py +0 -0
  432. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/backfill_affiliations.py +0 -0
  433. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/backfill_clause_span_id.py +0 -0
  434. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  435. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/backup_kg_to_gcs.sh +0 -0
  436. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/bootstrap_template_capture.py +0 -0
  437. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/bootstrap_typed_edges.py +0 -0
  438. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/build_cuad_clause_cache.py +0 -0
  439. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/build_function_routing_map.py +0 -0
  440. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_assemble_v2.py +0 -0
  441. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_assemble_v3.py +0 -0
  442. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  443. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_generate_hard_positives.py +0 -0
  444. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_generate_training.py +0 -0
  445. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_hybrid.py +0 -0
  446. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_hybrid2.py +0 -0
  447. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_jev_actor.py +0 -0
  448. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_jev_claimtypes.py +0 -0
  449. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_jev_operative.py +0 -0
  450. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_label_spans.py +0 -0
  451. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_laya_prep.py +0 -0
  452. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_laya_train.py +0 -0
  453. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_prep_operative.py +0 -0
  454. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_relabel_rubric.py +0 -0
  455. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_relabel_rubric2.py +0 -0
  456. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/cic1_train_operative.py +0 -0
  457. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/compare_extraction_models.py +0 -0
  458. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  459. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/compliance_engine_smoke.py +0 -0
  460. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/compliance_policy_demo.py +0 -0
  461. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/curate_taxonomy_gaps.py +0 -0
  462. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/dg_model_ab.py +0 -0
  463. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  464. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  465. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  466. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_legs.py +0 -0
  467. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_pool.py +0 -0
  468. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_relstructure.py +0 -0
  469. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/diagnose_acord_retrieval.py +0 -0
  470. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/eval_all.py +0 -0
  471. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/eval_ce.py +0 -0
  472. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/eval_listwise_b.py +0 -0
  473. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/export_ce_dataset.py +0 -0
  474. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/extract_features.py +0 -0
  475. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/listwise_variants.py +0 -0
  476. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/relational_features.py +0 -0
  477. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/train_ce.py +0 -0
  478. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/distill/train_modal.py +0 -0
  479. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/enrich_edgar_candidates.py +0 -0
  480. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/eval_chunking_ab.py +0 -0
  481. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  482. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/eval_compliance_gold.py +0 -0
  483. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/extract_arcadedb_docs.py +0 -0
  484. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/fetch_reference_models.py +0 -0
  485. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/generate_contract_python.py +0 -0
  486. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/git_post_commit_graphify.sh +0 -0
  487. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/granite_chunker_assess.py +0 -0
  488. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/graph_status.sh +0 -0
  489. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_acord.py +0 -0
  490. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  491. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  492. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_compliance_prod2.py +0 -0
  493. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_cuad.py +0 -0
  494. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_cuad_full.py +0 -0
  495. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_ftc_compliance.py +0 -0
  496. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_prod1.py +0 -0
  497. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_prod1_async.py +0 -0
  498. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ingest_smoke.py +0 -0
  499. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/install_git_hooks.sh +0 -0
  500. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/label_new_functions.py +0 -0
  501. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/legb_function_gate_recall.py +0 -0
  502. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/make_compliance_fixtures.py +0 -0
  503. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/make_compliance_gold.py +0 -0
  504. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  505. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  506. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  507. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/measure_generation_robustness.py +0 -0
  508. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/measure_harness_genericity.py +0 -0
  509. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/measure_silver.py +0 -0
  510. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/merge_docs_into_framework.py +0 -0
  511. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  512. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  513. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  514. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/mine_scarce_functions.py +0 -0
  515. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_arcadedb.py +0 -0
  516. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_backfill.py +0 -0
  517. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_exception_linking.py +0 -0
  518. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_gemma4_vllm.py +0 -0
  519. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  520. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_granite_server.py +0 -0
  521. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_granite_throughput.py +0 -0
  522. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_granite_vllm_server.py +0 -0
  523. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_query_app.py +0 -0
  524. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  525. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  526. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  527. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/modal_stack_a100.py +0 -0
  528. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ocr_benchmark.py +0 -0
  529. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ocr_preprocess.py +0 -0
  530. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/ontology_dimension_check.py +0 -0
  531. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/phase_a_leg_validate.py +0 -0
  532. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/populate_clause_kg.py +0 -0
  533. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/populate_entity_graph.py +0 -0
  534. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/populate_entity_graph_extracted.py +0 -0
  535. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/populate_property_store.py +0 -0
  536. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/prep_relational_verification.py +0 -0
  537. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/publish_manifests.py +0 -0
  538. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/reclassify_kg.py +0 -0
  539. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/refresh_framework_graph.sh +0 -0
  540. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/revert_reclass_flips.py +0 -0
  541. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/run_acord_retrieval.py +0 -0
  542. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/run_clause_exception_linking.py +0 -0
  543. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/semantic_judge_live_validate.py +0 -0
  544. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/semantic_judge_probe.py +0 -0
  545. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/snapshot_leg_a_eval.py +0 -0
  546. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/stack_correctness_validate.py +0 -0
  547. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/table_retrieval_smoke.py +0 -0
  548. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/train_function_classifier.py +0 -0
  549. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/train_legalbert_function.py +0 -0
  550. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/train_legalbert_modal.py +0 -0
  551. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/typed_rerank_validate.py +0 -0
  552. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/verify_wheel_install.sh +0 -0
  553. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/vllm_extraction_ab.py +0 -0
  554. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/vllm_kg_query_validate.py +0 -0
  555. {rag_wright-0.11.0 → rag_wright-0.13.0}/scripts/vllm_raw_diagnostic.py +0 -0
  556. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  557. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
  558. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
  559. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  560. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  561. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  562. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  563. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  564. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  565. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  566. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/__init__.py +0 -0
  567. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/agents.py +0 -0
  568. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/answers.py +0 -0
  569. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/config.py +0 -0
  570. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/discover.py +0 -0
  571. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/documents.py +0 -0
  572. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/ids.py +0 -0
  573. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/invoke.py +0 -0
  574. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/mcp.py +0 -0
  575. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/tracing.py +0 -0
  576. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/api/usage.py +0 -0
  577. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/__init__.py +0 -0
  578. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
  579. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/ard.py +0 -0
  580. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  581. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  582. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  583. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  584. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  585. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/embedding.py +0 -0
  586. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  587. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  588. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/fusion.py +0 -0
  589. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  590. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  591. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  592. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/invoke.py +0 -0
  593. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  594. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/manifests.py +0 -0
  595. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/registry.py +0 -0
  596. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  597. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/reranking.py +0 -0
  598. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  599. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  600. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  601. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  602. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  603. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  604. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  605. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/__init__.py +0 -0
  606. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/chunk.py +0 -0
  607. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/evals.py +0 -0
  608. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/extraction.py +0 -0
  609. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/graph.py +0 -0
  610. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/identifiers.py +0 -0
  611. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/ingestion.py +0 -0
  612. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/provenance.py +0 -0
  613. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/contracts/span.py +0 -0
  614. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/corpus/__init__.py +0 -0
  615. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  616. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/corpus/document_parser.py +0 -0
  617. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/corpus/embedded.py +0 -0
  618. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/corpus/http.py +0 -0
  619. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/evals/__init__.py +0 -0
  620. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/evals/gold.py +0 -0
  621. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
  622. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/evals/runner.py +0 -0
  623. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/evals/scorers.py +0 -0
  624. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/harness/__init__.py +0 -0
  625. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/__init__.py +0 -0
  626. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/builder.py +0 -0
  627. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/evaluate.py +0 -0
  628. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/group.py +0 -0
  629. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/layout.py +0 -0
  630. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/segment.py +0 -0
  631. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ingestion/tables.py +0 -0
  632. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/__init__.py +0 -0
  633. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/model_servers.py +0 -0
  634. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/profiles.py +0 -0
  635. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/seam.py +0 -0
  636. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/tag_structured.py +0 -0
  637. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/tracing.py +0 -0
  638. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/usage.py +0 -0
  639. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/models/weights.py +0 -0
  640. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ontology/__init__.py +0 -0
  641. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  642. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/ontology/registry.py +0 -0
  643. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
  644. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/__init__.py +0 -0
  645. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  646. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  647. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  648. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  649. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  650. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  651. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  652. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  653. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  654. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  655. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  656. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  657. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  658. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  659. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  660. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  661. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  662. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  663. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  664. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  665. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  666. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  667. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  668. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  669. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  670. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  671. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  672. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  673. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  674. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  675. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  676. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  677. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  678. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  679. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  680. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  681. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  682. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  683. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  684. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  685. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  686. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  687. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  688. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  689. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  690. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  691. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  692. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  693. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  694. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  695. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  696. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  697. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  698. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  699. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  700. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  701. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  702. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  703. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  704. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  705. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  706. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  707. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/options.py +0 -0
  708. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  709. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  710. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  711. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  712. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  713. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  714. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  715. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  716. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  717. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  718. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  719. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  720. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  721. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  722. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  723. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  724. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  725. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  726. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  727. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  728. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  729. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  730. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  731. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  732. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  733. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  734. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  735. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  736. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  737. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  738. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  739. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  740. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  741. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  742. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  743. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  744. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  745. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  746. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  747. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  748. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  749. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  750. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  751. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  752. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  753. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  754. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  755. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  756. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  757. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/packs/reference_seam.py +0 -0
  758. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/py.typed +0 -0
  759. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/__init__.py +0 -0
  760. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  761. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  762. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  763. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  764. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  765. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  766. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  767. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  768. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/spans/__init__.py +0 -0
  769. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/spans/page_map.py +0 -0
  770. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/store/__init__.py +0 -0
  771. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/store/chunk_text.py +0 -0
  772. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  773. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  774. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/observability.py +0 -0
  775. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  776. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  777. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/util/__init__.py +0 -0
  778. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/util/concurrent.py +0 -0
  779. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/util/pdfium.py +0 -0
  780. {rag_wright-0.11.0 → rag_wright-0.13.0}/src/rag_wright/util/spacy_model.py +0 -0
  781. {rag_wright-0.11.0 → rag_wright-0.13.0}/tasks.md +0 -0
  782. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/__init__.py +0 -0
  783. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/__init__.py +0 -0
  784. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_agent_chat_model.py +0 -0
  785. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_agent_chat_model_live.py +0 -0
  786. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_answers_exports.py +0 -0
  787. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_api_embedder_ps39.py +0 -0
  788. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_bytes_ingest.py +0 -0
  789. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_capability_reexports.py +0 -0
  790. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  791. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_discover.py +0 -0
  792. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_documents.py +0 -0
  793. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_drop_workspace.py +0 -0
  794. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_drop_workspace_live.py +0 -0
  795. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_e2e.py +0 -0
  796. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_invoke.py +0 -0
  797. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_kg.py +0 -0
  798. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_mcp.py +0 -0
  799. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_metering_tracing_exports.py +0 -0
  800. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_model_role_export.py +0 -0
  801. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_open_workspace_reconfig.py +0 -0
  802. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_options.py +0 -0
  803. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_pack_sdk.py +0 -0
  804. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_pack_store.py +0 -0
  805. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_pdf_page_count.py +0 -0
  806. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_public_gaps_ps38.py +0 -0
  807. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_tracing_helpers_ps32.py +0 -0
  808. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_usage.py +0 -0
  809. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_workspace.py +0 -0
  810. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/api/test_workspace_models.py +0 -0
  811. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  812. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_doc_references.py +0 -0
  813. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  814. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_import_contracts.py +0 -0
  815. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_lock_version.py +0 -0
  816. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  817. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_pdfium_door.py +0 -0
  818. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/arch/test_shipped_skills.py +0 -0
  819. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/async_helpers.py +0 -0
  820. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/__init__.py +0 -0
  821. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  822. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_answer_generator.py +0 -0
  823. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  824. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  825. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_authoring_contract.py +0 -0
  826. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_chunk_read.py +0 -0
  827. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_chunk_write.py +0 -0
  828. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  829. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_claim_extraction.py +0 -0
  830. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  831. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  832. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_compliance_store.py +0 -0
  833. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  834. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  835. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  836. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  837. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_adapter.py +0 -0
  838. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_async.py +0 -0
  839. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_extraction.py +0 -0
  840. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  841. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_dg_private.py +0 -0
  842. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_disambiguation.py +0 -0
  843. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_document_scope.py +0 -0
  844. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_embedding.py +0 -0
  845. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  846. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_entity_resolution.py +0 -0
  847. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  848. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_fusion.py +0 -0
  849. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_extraction.py +0 -0
  850. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_query.py +0 -0
  851. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_graph_storage.py +0 -0
  852. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_highlight_serve.py +0 -0
  853. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_hybrid_search.py +0 -0
  854. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_jev_decision.py +0 -0
  855. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_manifest_validation.py +0 -0
  856. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_manifests.py +0 -0
  857. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_parsing.py +0 -0
  858. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_parties_extraction.py +0 -0
  859. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  860. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  861. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_query_understanding.py +0 -0
  862. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_registry.py +0 -0
  863. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_remote_encoders.py +0 -0
  864. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_repair_partition.py +0 -0
  865. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  866. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_reranking.py +0 -0
  867. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_retrieval_core.py +0 -0
  868. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  869. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  870. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_method.py +0 -0
  871. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  872. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_runtime_registry.py +0 -0
  873. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  874. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  875. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  876. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  877. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  878. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/compliance_fakes.py +0 -0
  879. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/conftest.py +0 -0
  880. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/__init__.py +0 -0
  881. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  882. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_chunk_record.py +0 -0
  883. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_compliance.py +0 -0
  884. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  885. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_extraction.py +0 -0
  886. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_function.py +0 -0
  887. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_function_routing.py +0 -0
  888. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_identifiers.py +0 -0
  889. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  890. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_jurisdiction.py +0 -0
  891. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_ontology.py +0 -0
  892. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_property.py +0 -0
  893. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_provenance.py +0 -0
  894. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/contracts/test_value_match.py +0 -0
  895. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/__init__.py +0 -0
  896. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  897. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_canonicalize.py +0 -0
  898. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_cuad.py +0 -0
  899. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  900. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_document_parser.py +0 -0
  901. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_edgar.py +0 -0
  902. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_embedded.py +0 -0
  903. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  904. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_http.py +0 -0
  905. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_parse_wire2.py +0 -0
  906. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/corpus/test_selection.py +0 -0
  907. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/eval/test_contractnli_judge.py +0 -0
  908. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  909. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/eval/test_kg_property_rerank.py +0 -0
  910. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  911. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/eval/test_relational_eval.py +0 -0
  912. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/__init__.py +0 -0
  913. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_gold_contracts.py +0 -0
  914. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_gold_import.py +0 -0
  915. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_langfuse_backend.py +0 -0
  916. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_runner.py +0 -0
  917. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_scorer_parity.py +0 -0
  918. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_scorers_a.py +0 -0
  919. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_scorers_b.py +0 -0
  920. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_scorers_c.py +0 -0
  921. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/evals/test_scorers_d.py +0 -0
  922. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  923. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  924. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  925. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  926. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  927. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  928. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/foundation/__init__.py +0 -0
  929. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  930. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/foundation/test_model_seam_structured.py +0 -0
  931. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/__init__.py +0 -0
  932. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_accounting.py +0 -0
  933. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_engine_wiring.py +0 -0
  934. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_live.py +0 -0
  935. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_recorder.py +0 -0
  936. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/harness/test_harness_thinking.py +0 -0
  937. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/__init__.py +0 -0
  938. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_aevaluate.py +0 -0
  939. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_builder.py +0 -0
  940. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  941. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  942. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_document_metadata.py +0 -0
  943. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_evaluate.py +0 -0
  944. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  945. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  946. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_sheet_continuations.py +0 -0
  947. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  948. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_table_rows.py +0 -0
  949. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_tuning.py +0 -0
  950. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_unit_grouper.py +0 -0
  951. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ingestion/test_unit_representative.py +0 -0
  952. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/journey/incidents_domain.py +0 -0
  953. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/journey/incidents_pack.ttl +0 -0
  954. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/journey/test_incidents_journey.py +0 -0
  955. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/journey/test_pack_schema.py +0 -0
  956. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/__init__.py +0 -0
  957. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/test_compliance_server.py +0 -0
  958. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  959. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  960. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/test_relational_qa_server.py +0 -0
  961. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  962. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/__init__.py +0 -0
  963. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_async_infra.py +0 -0
  964. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  965. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_model_servers.py +0 -0
  966. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_models_dir.py +0 -0
  967. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_no_gemma_default.py +0 -0
  968. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_profile_routing.py +0 -0
  969. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_profile_seam.py +0 -0
  970. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_seam_async.py +0 -0
  971. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
  972. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_seam_event_loops.py +0 -0
  973. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_seam_retry.py +0 -0
  974. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_seam_stream.py +0 -0
  975. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_serving_seam.py +0 -0
  976. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_serving_wiring.py +0 -0
  977. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_tag_structured.py +0 -0
  978. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_tag_structured_async.py +0 -0
  979. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_tracing.py +0 -0
  980. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/models/test_usage.py +0 -0
  981. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/__init__.py +0 -0
  982. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_clause_template.py +0 -0
  983. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  984. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_derivation.py +0 -0
  985. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  986. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  987. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  988. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  989. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  990. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/reference/test_compliance_reference.py +0 -0
  991. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/reference/test_contract_seam.py +0 -0
  992. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  993. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  994. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  995. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
  996. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/skills/__init__.py +0 -0
  997. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
  998. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  999. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_boundary.py +0 -0
  1000. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  1001. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  1002. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_clause_function_classifier.py +0 -0
  1003. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  1004. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  1005. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  1006. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_dim_classifier.py +0 -0
  1007. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_dim_fleet_live.py +0 -0
  1008. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_function_classifier.py +0 -0
  1009. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_hybrid_classifier.py +0 -0
  1010. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  1011. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_legalbert_classifier.py +0 -0
  1012. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_model_capabilities.py +0 -0
  1013. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_new_function_labels.py +0 -0
  1014. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_page_map.py +0 -0
  1015. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_property_extractor.py +0 -0
  1016. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_property_grounding.py +0 -0
  1017. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_reclassify.py +0 -0
  1018. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_residual_decision.py +0 -0
  1019. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_scarce_function_labels.py +0 -0
  1020. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_segment.py +0 -0
  1021. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_segmentation_vocab.py +0 -0
  1022. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_semantic_judge.py +0 -0
  1023. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  1024. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_setfit_probabilities.py +0 -0
  1025. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_span_offsets.py +0 -0
  1026. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_stage_labels_0005.py +0 -0
  1027. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_symbolic_validation.py +0 -0
  1028. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  1029. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/__init__.py +0 -0
  1030. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_affiliation_backfill.py +0 -0
  1031. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  1032. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_contract.py +0 -0
  1033. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_property.py +0 -0
  1034. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1035. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_arcadedb_schema.py +0 -0
  1036. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_chunk_text.py +0 -0
  1037. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_concurrent_writes.py +0 -0
  1038. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_contract_kg_store_live.py +0 -0
  1039. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_document_metadata_live.py +0 -0
  1040. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_document_scope.py +0 -0
  1041. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_engine_domain_neutral.py +0 -0
  1042. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_entities_by_name.py +0 -0
  1043. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_kg_edges.py +0 -0
  1044. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_kg_mutations.py +0 -0
  1045. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_kg_read.py +0 -0
  1046. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_kg_write.py +0 -0
  1047. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_neutral_schema.py +0 -0
  1048. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_store_create_flag.py +0 -0
  1049. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/store/test_write_graph_idempotent.py +0 -0
  1050. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/__init__.py +0 -0
  1051. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  1052. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1053. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_clause_results.py +0 -0
  1054. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_compliance_check.py +0 -0
  1055. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1056. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  1057. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1058. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1059. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  1060. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1061. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1062. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1063. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_observability.py +0 -0
  1064. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1065. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1066. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1067. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1068. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_scaffold.py +0 -0
  1069. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1070. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1071. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1072. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/test_backfill_clause_span_id.py +0 -0
  1073. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/test_dg_model_ab.py +0 -0
  1074. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/test_populate_clause_kg.py +0 -0
  1075. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/test_populate_entity_graph.py +0 -0
  1076. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/util/__init__.py +0 -0
  1077. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/util/test_concurrent.py +0 -0
  1078. {rag_wright-0.11.0 → rag_wright-0.13.0}/tests/util/test_spacy_model.py +0 -0
@@ -161,9 +161,20 @@ them later and each one is a refactor with its own test fallout:
161
161
  | resuming a suspended run | the continuation renders ITSELF; the substrate asks |
162
162
  | the agent's chat model | from the engine's model profile, never a string in the substrate |
163
163
 
164
- **Collect them into ONE object the substrate is handed** -- we called it `AgentDefinition`, carrying the
165
- tool surface, the planning classification, the worker roster and the context type. Four declared facts, and
166
- **the substrate derives everything else**.
164
+ **Collect them into ONE object the substrate is handed** -- `AgentDefinition`, with FIFTEEN required
165
+ fields, and **the substrate derives everything else**. Four are the shape: the tool surface (`surface`), the
166
+ planning classification (`planning`), the worker roster (`workers`) and the context type (`context_schema`).
167
+ The other eleven are the customization surface, and an agent without them runs but is quietly less capable:
168
+ `retry_on`, `message_for`, `model_id_for`, `prompts` (an `AgentPrompts`, eleven fields of its own: every word
169
+ the model reads), `repeatable`, `question_argument`, `framings`, `carry_forward`, `rules`, `decision_points` and
170
+ `read_framing`. The field-by-field reference, generated from the tier, is `docs/harness.md` in the engine
171
+ repository.
172
+
173
+ **Build every worker with `worker_spec(..., definition=...)`.** `worker_spec`'s policy parameters default to
174
+ inert values, and all but the ledger are fields of the definition you already declared; a worker built
175
+ without threading them ran with no retries, no repeat suppression and no decision recording while every test
176
+ passed. With `definition=`, each parameter you leave at its default is taken from the definition, and a value
177
+ you pass still wins.
167
178
 
168
179
  That last clause is the whole trick. The alternative -- let the product pass the derived sets too -- is a
169
180
  smaller diff and scores perfectly on every axis, and it exports an invariant as a convention the next
@@ -154,6 +154,10 @@ category.
154
154
 
155
155
  ## 5. Spreadsheets, tables and embedded files
156
156
 
157
+ - **Blank PDF pages** are read as empty, never sent to the vision model (engine 0.13.0). On a parse cache built
158
+ by an earlier engine with `VISION_OCR` configured, run `find_blank_pages_with_text(cache_dir, sources)` once:
159
+ delete each finding's `cache_files` and re-ingest that document (its blank pages may hold invented text).
160
+
157
161
  - **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
158
162
  `DocumentReport.skipped_hidden_sheets`).
159
163
  - **Blank rows inside a table**: the parse cuts a sheet's table at every blank row; the engine glues a piece back
@@ -58,7 +58,7 @@ Every product item lands in one or more of these. The route column is where the
58
58
  | **Domain knowledge**: vocabulary, schema, constraints, synonyms, decision criteria | "controlled vocabularies", "the ontology", "mandatory fields", "valid ranges" | `EngineConfig(pack=...)` (the store creates the declared types on `open_workspace`); your capabilities read value sets and SHACL shapes with `rdflib` / `pyshacl` | `authoring-a-capability` | ontology authoring |
59
59
  | **Ingestion**: documents, spreadsheets, images, embedded files into the graph | "parse the forms", "load the lab reports", "idempotent re-runs" | `build_ingestion` (your extractor + optional hooks) → `aingest`; `IngestSource`, `IngestionTuning`, `table_rows` / `TableRow`, `evaluate_ingestion`, `check_extraction`; `KgNode` / `KgEdge` | `building-an-ingestion-capability` | KG construction |
60
60
  | **Entity and registry resolution** | "resolve against the yarn register", "queue unresolved mentions" | your `document_hook`; the entity-resolution building blocks on `rag_wright.pack_sdk` | `building-an-ingestion-capability` | entity resolution |
61
- | **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, hybrid search from `rag_wright.pack_sdk`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
61
+ | **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, `Range`, hybrid span search with `span_search` from `rag_wright.api`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
62
62
  | **A cited answer, or a refusal** | "every answer cites its source", "say when it is not in the records" | `agenerate_answer` over `EvidenceItem`s (an answer states its support; "none" abstains), `ajudge_spans` | `authoring-a-capability` | concepts (answers) |
63
63
  | **A typed decision or classification** | "classify the structure", "which of these is it" | `classifier-opportunity-analysis` first; then rules, a trained classifier, or the decision model (`jev_decision` from `engine_capabilities()`, criteria in the pack) | `classifier-opportunity-analysis` → `setfit` / `laya` | classification and decision models |
64
64
  | **A deterministic workflow behind a button** (mode **D**) | "upload, confirm, save", "export CSV" | a product **operation** (one function per user operation) calling your capabilities; the route calls the operation | `building-a-product-backend` | domain-adaptation step 8 |
@@ -27,8 +27,11 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
27
27
  `EngineConfig`/`StoreConfig` (`StoreConfig.from_env()` reads `ARCADEDB_*`)/`open_workspace`
28
28
  (`temporary_workspace`/`drop_workspace` for disposable and removed databases), the invokers
29
29
  (`ainvoke_subgraph`/`invoke_model`/`ainvoke_model`), discovery (`capability_index`/`discover`), the KG accessors
30
- (`kg_read` with `key_range`, `kg_write`, `kg_edges` with `NOT_NULL`, `kg_count`/`kg_delete`/`kg_update`,
31
- `entities_by_name`, `span_positions`), `pack_store(ws, cls)` (build your pack's store extension over the
30
+ (`kg_read`, `kg_write`, `kg_edges`, `kg_count`/`kg_delete`/`kg_update`, all filtering by `where` values that
31
+ are equality, a list for membership, `NOT_NULL` or a `Range(gt=, ge=, lt=, le=)` on any number of fields,
32
+ evaluated in the store;
33
+ `entities_by_name`, `span_positions`), hybrid span search (`span_search` / `aspan_search`: cited spans from
34
+ the dense and sparse index, fused in the store), `pack_store(ws, cls)` (build your pack's store extension over the
32
35
  workspace's store; the store itself stays private), metering and tracing (`measure_usage`, `record_usage`,
33
36
  `traced_run`/`traced_step`, and for code emitting its own generations `tracing_on`/`trace_level`/
34
37
  `start_generation`/`finish_generation`/`flush_tracing`), the query embedder (`ws.embedder` where you hold a
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.13.0"
3
+ }
@@ -4,6 +4,28 @@ 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.13.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.12.0...0.13.0) (2026-10-15)
8
+
9
+
10
+ ### Features
11
+
12
+ * **PS-35:** migrate a pre-0.2.0 database's Span fields through rag_wright.api ([856f956](https://github.com/fzaidi-dai/RAG_Wright/commit/856f956f674c731d170878d44ec3fef980a10ba9))
13
+ * **PS-44:** range filters on any number of KG fields, evaluated in the store (TexWright ER-1) ([cc62c49](https://github.com/fzaidi-dai/RAG_Wright/commit/cc62c49000161567869d46127bb158db16106c28))
14
+ * **PS-45:** a public hybrid span search on rag_wright.api (engine gap G24) ([4aa802f](https://github.com/fzaidi-dai/RAG_Wright/commit/4aa802fdc6cf12a3c732aa7a41e4de6240dd05da))
15
+ * **PS-47:** find cached parses holding text a VLM invented for a blank page ([ff92d81](https://github.com/fzaidi-dai/RAG_Wright/commit/ff92d81956590002418ef50f41dee54e0b0b6ef8))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **PS-46:** a page with no ink is blank, never escalated to the VLM (TexWright 2026-10-15) ([fc633a8](https://github.com/fzaidi-dai/RAG_Wright/commit/fc633a84aa52a89de5b79d90b50d80f7d622d792))
21
+
22
+ ## [0.12.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.11.0...0.12.0) (2026-10-15)
23
+
24
+
25
+ ### Features
26
+
27
+ * **PS-43:** worker_spec(definition=), the harness design reference, and the harness source cleared of its originating product's vocabulary ([c19ff4d](https://github.com/fzaidi-dai/RAG_Wright/commit/c19ff4da006611383c6a7bca07ba633e345b44d8))
28
+
7
29
  ## [0.11.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.10.0...0.11.0) (2026-10-15)
8
30
 
9
31
 
@@ -55,7 +55,12 @@ 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-14): PS-32 done: the agent harness is the engine's third public tier `rag_wright.harness`**
58
+ > **CURRENT STATE (2026-10-15): `rag-wright` 0.11.0 is RELEASED** (PR #13: PS-40 the product-building skills ship,
59
+ > PS-41 the skills audit, PS-42 by-slug registration; RuleWright's guide `docs/specs/public-surface/rulewright-migration-0.11.0.md`).
60
+ > **PS-43 RELEASED as 0.12.0 (2026-10-15, PR #14)**: `worker_spec(definition=)`, `docs/harness.md` (tables generated by
61
+ > `scripts/build_harness_doc.py`), the harness source cleared of RuleWright's vocabulary with a guard; guide
62
+ > `rulewright-migration-0.12.0.md`. Before it,
63
+ > **(2026-10-14): PS-32 done: the agent harness is the engine's third public tier `rag_wright.harness`**
59
64
  > (ADR-0139 handover; with PS-39 `ws.embedder` / `api.query_embedder`; RuleWright's guide
60
65
  > `docs/specs/public-surface/rulewright-migration-0.10.0.md`; RELEASED as `rag-wright` 0.10.0 on 2026-10-14: PyPI + GitHub release `0.10.0`, PR #12). Before it,
61
66
  > **(2026-10-13): `rag-wright` 0.9.0 is RELEASED** (PS-36 `agent_chat_model`, PS-37 drop/temporary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.11.0
3
+ Version: 0.13.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
@@ -117,6 +117,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
117
117
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
118
118
  - **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
119
119
  kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
120
+ - **Building your product's agent?** [The agent harness](docs/harness.md): the third tier's design, every field a
121
+ product declares, and where it goes quiet rather than failing.
120
122
  - **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
121
123
  [Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
122
124
  - **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
@@ -59,6 +59,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
59
59
  product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
60
60
  - **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
61
61
  kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
62
+ - **Building your product's agent?** [The agent harness](docs/harness.md): the third tier's design, every field a
63
+ product declares, and where it goes quiet rather than failing.
62
64
  - **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
63
65
  [Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
64
66
  - **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
@@ -60,7 +60,7 @@ typed edges, and `ComplianceStore` creates `Requirement`, so they appear the fir
60
60
 
61
61
  A database created before the `Span` field rename (`contract_id`, `function`, `functions` became `document_id`,
62
62
  `primary_tag`, `tags`) is refused by `ensure_schema` with a `RuntimeError`; migrate it once with
63
- `uv run python -u scripts/migrate_span_fields.py <database>`.
63
+ `migrate_span_fields(config, corpus=...)` from `rag_wright.api` ([installation](installation.md)).
64
64
 
65
65
  ## Stop / reset
66
66
 
@@ -84,3 +84,14 @@ now, a self-hosted vLLM-Gemma-4 later for data sovereignty (only `base_url` chan
84
84
  as the escalation provider for data sovereignty; (3) routing the vision call **through the async model seam**
85
85
  for true thread cancellation (today `to_thread` unblocks the caller at the deadline but the docling thread
86
86
  runs on); (4) classical preprocessing stays available as a cheap first pass but is not the heavy-scan fix.
87
+
88
+ ## Amendment (2026-10-15, PS-46): a blank page is not degraded
89
+
90
+ A page with no ink read as both "blurry" (a white page has Laplacian variance 0) and "faint" (no pixel below 128),
91
+ so it was escalated, and a VLM asked to transcribe an empty page invents one (TexWright: meeting minutes in another
92
+ language, kept in the parse). The gate now measures `ink_frac` (pixels below 200, faint grey included) and returns
93
+ `ScanQuality.BLANK` for a page with no OCR text and `ink_frac` at most 1e-4: never escalated, never flagged
94
+ needs-rescan, listed in `TieredOCRReport.blank_pages`. Measured margin: blank 0; the heavy faint scan 0.077-0.082
95
+ (its `dark_frac` is 0.0025, which is why `dark_frac` alone cannot separate it); the sparsest real fixture page
96
+ 0.019. The post-escalation check stays a flag rather than dropping the VLM text: it is an English word-rate test,
97
+ and a correct transcription of a page with few common words (a number-heavy table) fails it.
@@ -68,6 +68,10 @@ Members: `STRUCTURED_REASONING` (`'structured_reasoning'`), `STRUCTURED_REASONIN
68
68
 
69
69
  One ranked capability match from `discover` — enough for an agent to pick and invoke it by `slug`.
70
70
 
71
+ ### `SpanHit(*, span_id: str, text: str, document_id: str, doc_start: Optional[int] = None, doc_end: Optional[int] = None, pages: list[int] = [], bbox: Optional[tuple[float, float, float, float]] = None, primary_tag: str = '', rank: int, found_by: tuple[str, ...]) -> None`
72
+
73
+ One cited span from `span_search`, best first. `found_by` says which legs found it: `"hybrid"` (the fused dense + sparse search) and/or `"dense"` (the dense floor). `bbox` is `(l, t, r, b)` or None.
74
+
71
75
  ### `KgNode(type: 'str', key_field: 'str', props: 'dict[str, object]') -> None`
72
76
 
73
77
  A typed KG node to upsert (DD-1b, ADR-0117): `type` is the vertex type, `key_field` the identity field to upsert on, `props` the fields (including `key_field`) as DOMAIN-NATIVE values. The store encodes each prop by its pack-declared storage type -- the caller never serializes to the store's wire format.
@@ -76,6 +80,18 @@ A typed KG node to upsert (DD-1b, ADR-0117): `type` is the vertex type, `key_fie
76
80
 
77
81
  A typed KG edge to create between two nodes identified by (type, key_field, key). `props` are native values (edge properties are type-driven: edges declare no storage schema).
78
82
 
83
+ ### `Range(gt: 'Optional[object]' = None, ge: 'Optional[object]' = None, lt: 'Optional[object]' = None, le: 'Optional[object]' = None) -> None`
84
+
85
+ A `where` value meaning a comparison, evaluated in the store (ER-1): `gt` (>), `ge` (>=), `lt` (<), `le` (<=), at most one lower and one upper bound, at least one bound. Bounds are scalars (numbers compare as numbers, strings lexically). Any number of fields may carry one, beside equality, membership and `NOT_NULL`, on every KG call that takes `where`: `where={"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`.
86
+
87
+ #### `Range.terms(self) -> 'list[tuple[str, object]]'`
88
+
89
+ `[(operator, bound), ...]`, lower bound first.
90
+
91
+ ### `BlankPageText(*, source: str, pages: dict[int, str], cache_files: list[str]) -> None`
92
+
93
+ One cached parse with text on blank pages. `source` is the PDF's path (or the name given with its bytes), `pages` maps each blank page to the text the cached parse holds there, and `cache_files` are the cached parse(s) and their OCR sidecar: delete them, then re-ingest the document so it is parsed again.
94
+
79
95
  ### `EvidenceItem(*, chunk_id: str, text: str, confidence: Optional[str] = None, properties: Optional[list[dict]] = None) -> None`
80
96
 
81
97
  One piece of grounding evidence: a chunk's text, its `chunk_id` (the citation), and — for a graph-derived fact — its confidence tag (surfaced to the generator, FR-S.4).
@@ -296,7 +312,7 @@ The semantic boundary-discovery seam: decide chunk boundaries as a partition of
296
312
 
297
313
  ### `open_workspace(config: 'EngineConfig', *, corpus: 'str', reset: 'bool' = False, create: 'bool' = True) -> 'WorkspaceHandle'`
298
314
 
299
- Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema: the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose `Span` type still has the pre-ING-8d field names (migrate it with `scripts/migrate_span_fields.py`). Returns an opaque `WorkspaceHandle`. `reset=True` drops + recreates the database (test/clean-slate) and bypasses the cache. A missing database is created (logged): that is how a new corpus is provisioned. `create=False` raises `LookupError` instead (PS-27) -- use it wherever the corpus must already exist, so a wrong name fails loudly rather than opening an empty graph.
315
+ Resolve (and cache) the workspace for `corpus` (the backend database name) from `config`. Ensures the schema: the neutral engine types, plus `config.pack`'s declared types when set. Raises `RuntimeError` on a database whose `Span` type still has the pre-ING-8d field names (migrate it with `migrate_span_fields`). Returns an opaque `WorkspaceHandle`. `reset=True` drops + recreates the database (test/clean-slate) and bypasses the cache. A missing database is created (logged): that is how a new corpus is provisioned. `create=False` raises `LookupError` instead (PS-27) -- use it wherever the corpus must already exist, so a wrong name fails loudly rather than opening an empty graph.
300
316
 
301
317
  One handle per store and corpus is cached for the process. An equal `config` returns it; a different one (new models, options, credentials or pack) returns a new handle that replaces it from then on, so a configuration change takes effect without a restart (PS-16). The new handle reuses the store when the store settings and the pack are unchanged, and the query embedder when the embedding profile is unchanged; a call still holding the old handle finishes on the old config.
302
318
 
@@ -304,6 +320,10 @@ One handle per store and corpus is cached for the process. An equal `config` ret
304
320
 
305
321
  Drop the database `corpus` (PS-37): everything in it, the retrieval index and the knowledge graph, is deleted and cannot be recovered. Returns True if it existed, False if there was nothing to drop. A cached handle for it is closed and forgotten, so a later `open_workspace` starts fresh. A missing or blank `corpus` raises `ValueError`: the name is always explicit, never a default database.
306
322
 
323
+ ### `migrate_span_fields(config: 'EngineConfig', *, corpus: 'str', batch: 'int' = 5000, progress: 'Optional[Callable[[int, int], None]]' = None) -> 'int'`
324
+
325
+ Migrate the database `corpus` from the pre-0.2.0 `Span` field names (`contract_id`, `function`, `functions`) to the generic ones (`document_id`, `primary_tag`, `tags`), the database `open_workspace` refuses until this has run (PS-35). Values are copied in batches of `batch` and the old properties dropped; `progress(done, total)` is called after each batch. Idempotent: returns the number of records moved, 0 when already migrated. The database must exist (`LookupError` otherwise; it is never created), and a missing or blank `corpus` raises `ValueError`. Afterwards the schema is checked, so a database this returns for opens with `open_workspace`.
326
+
307
327
  ### `temporary_workspace(config: 'EngineConfig', *, prefix: 'str' = 'tmp') -> 'Iterator[WorkspaceHandle]'`
308
328
 
309
329
  A workspace on a fresh database, `<prefix>_<12 hex>`, dropped when the block exits, whether it succeeds or raises (PS-37). For a probe or a measurement whose database must not outlive it: `with temporary_workspace(config, prefix="probe") as ws: ...`.
@@ -386,7 +406,7 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
386
406
 
387
407
  ### `kg_read(ws: 'WorkspaceHandle', node_type: 'str', *, where: 'Optional[dict]' = None, fields: 'Optional[list]' = None, distinct: 'Optional[str]' = None, order_by: 'Optional[str]' = None, limit: 'Optional[int]' = None, key_range: 'Optional[tuple]' = None) -> 'list[dict]'`
388
408
 
389
- Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Equality/`IN` filters, a `key_range=(field, lo, hi)` range, projection, distinct, order, limit; an empty list `where` value is scope-to-nothing -> `[]`.
409
+ Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence) or a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit.
390
410
 
391
411
  ### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
392
412
 
@@ -398,7 +418,7 @@ Generic edge TRAVERSAL over the workspace (see `Store.kg_edges`): node-start out
398
418
 
399
419
  ### `kg_count(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
400
420
 
401
- The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`).
421
+ The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`); `where` as in `kg_read`, `Range` values included.
402
422
 
403
423
  ### `kg_delete(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
404
424
 
@@ -416,6 +436,14 @@ Resolve an entity NAME to every entity node it matches: `[{entity_id, name, enti
416
436
 
417
437
  Every span of `document` with its position provenance, ordered by document position. Each row: `span_id`, `parent_chunk_id`, `span_index`, `text`, `primary_tag` (the span tagger's primary tag, "" if untagged), `document_id`, `doc_start` / `doc_end` (document-absolute offsets), `pages`, and `bbox` DECODED to a `(l, t, r, b)` tuple or None. The engine MECHANISM behind a product's citation/highlight types -- the product wraps these rows into its own presentation type (e.g. `SpanLocation`).
418
438
 
439
+ ### `span_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
440
+
441
+ Hybrid search over the workspace's span index (every ingested span, embedded dense and sparse): the two legs fused by Reciprocal Rank Fusion in the store, with the top `dense_floor` pure-dense spans guaranteed a place, so a strong semantic match a common-token query would push out of the fused pool is kept (0 turns it off). Returns up to `k` `SpanHit`s, best first, each citation-ready: `span_id`, `text`, `document_id`, `doc_start` / `doc_end`, `pages`, `bbox`, `primary_tag`, `rank`, and `found_by` (`"hybrid"` and/or `"dense"`). `documents` scopes it to those source documents in the store (`None` = all, `[]` = nothing); `tag` keeps one primary tag. No reranking: compose `BGEReranker` over the hits if you want one. Raises `RuntimeError` when the workspace has no embedder.
442
+
443
+ ### `aspan_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
444
+
445
+ `span_search` off the event loop (the query embedding and the store calls block), for an async caller.
446
+
419
447
  ### `document_of(entity_id: 'str') -> 'str'`
420
448
 
421
449
  The source-document id embedded in a chunk/span/unit id (`<source_doc_id>:<idx>:<hash>` -> the first, delimiter-safe segment). Empty in -> empty out.
@@ -448,6 +476,10 @@ The number of pages in a PDF (a path or the PDF's bytes), read under the engine'
448
476
 
449
477
  The async, deadline-bounded twin of `parse_document_bytes` (ADR-0057): runs the docling parse off the event loop.
450
478
 
479
+ ### `find_blank_pages_with_text(cache_dir: 'Any', sources: 'Iterable[Source]' = (), *, progress: 'Optional[Callable[[int, int], None]]' = None) -> 'list[BlankPageText]'`
480
+
481
+ Audit the parse cache under `cache_dir` (the one given to `parse_document`, or to `aingest`, which keeps its parses in `parsed/`; searched recursively) for text on blank pages. `sources` are the documents' PDFs, as paths or `(name, bytes)`; files embedded in a parsed package are stored in the cache and audited without being passed. A source that is not a PDF, or has no cached parse, is skipped. `progress(done, total)` is called after each PDF. Raises `FileNotFoundError` when `cache_dir` does not exist.
482
+
451
483
  ### `agenerate_answer(query: 'str', evidence: 'list[EvidenceItem]', *, ws: 'Any', guidance: 'Optional[str]' = None) -> 'GeneratedAnswer'`
452
484
 
453
485
  A grounded, cited answer to `query` over `evidence`, or an abstention. Empty evidence abstains without a model call; a citation not in the evidence is dropped, and an answer left with no valid citation becomes an abstention (no claim without a citation). `answer_kind` says whether the evidence fully supported the answer (`answered`), only partly (`partial`) or not at all (`abstained`). `guidance` adds your domain's wording to the domain-neutral method.
@@ -1,6 +1,6 @@
1
1
  # Agent harness reference — `rag_wright.harness`
2
2
 
3
- > **Generated** from the live `rag_wright.harness.__all__` by `scripts/build_api_docs.py` — do not edit by hand. The agent harness tier (ADR-0139): what a product builds its agent on. It reaches the rest of the engine only through `rag_wright.api`. See the package docstring.
3
+ > **Generated** from the live `rag_wright.harness.__all__` by `scripts/build_api_docs.py` — do not edit by hand. The agent harness tier (ADR-0139): what a product builds its agent on. It reaches the rest of the engine only through `rag_wright.api`. The design reference, with what a product declares and why, is `docs/harness.md`.
4
4
 
5
5
  ## Types
6
6
 
@@ -20,11 +20,11 @@ Every word a product says to its model: the tier prompts, the memory line and th
20
20
 
21
21
  One user-initiated agent turn, and the scope it ran under.
22
22
 
23
- `run_id` is the run's identity: `run-contract.md` obligation 1 requires a run to outlive the view that started it, so it is returned rather than held in memory, and it is what `resume_run` addresses.
23
+ `run_id` is the run's identity: a run must outlive the view that started it, so it is returned rather than held in memory, and it is what `resume_run` addresses.
24
24
 
25
25
  ### `RunOutcome(*values)`
26
26
 
27
- What became of a run, named in CODE because none of it is a judgement (T-5a.15).
27
+ What became of a run, named in CODE because none of it is a judgement.
28
28
 
29
29
  **Every transition here is decidable from the state alone**, which is why it is not in a prompt: the project's own rule is that a warning in a prompt is not a constraint, and `read_the_question` was instructed in four places and obeyed zero times.
30
30
 
@@ -40,7 +40,7 @@ A memory operation reached the store with no run context.
40
40
 
41
41
  ### `WorkerReport(*, status: str, need: str = '') -> None`
42
42
 
43
- What every worker carries, whatever else it returns (`AR-16`).
43
+ What every worker carries, whatever else it returns.
44
44
 
45
45
  **Structured, because the orchestrator chains it.** `status` lets a program branch; `need` is how a worker says it cannot finish without a person, since it has no way to ask.
46
46
 
@@ -54,7 +54,7 @@ One thing worth telling the client about.
54
54
 
55
55
  A model call passed a wall-clock ceiling. **Never raised directly** -- one of the two below is.
56
56
 
57
- There are two ceilings with OPPOSITE retry semantics, and they had one exception type between them until T-5a.12q. That cost a live run `compliance_worker` SEVEN identical dispatches: the whole-turn breach escaped the worker, arrived at the parent as a failed `task` tool call, and `ToolRetryMiddleware(retry_on=TRANSIENT)` re-ran the worker's entire job. Catch this base when you mean "some deadline fired"; never put it in a retry set.
57
+ There are two ceilings with OPPOSITE retry semantics, and they had one exception type between them at first. That cost one worker in a live run SEVEN identical dispatches: the whole-turn breach escaped the worker, arrived at the parent as a failed `task` tool call, and `ToolRetryMiddleware(retry_on=TRANSIENT)` re-ran the worker's entire job. Catch this base when you mean "some deadline fired"; never put it in a retry set.
58
58
 
59
59
  ### `ModelAttemptTooSlow`
60
60
 
@@ -94,7 +94,7 @@ What a product offers an agent run, and the two things the substrate asks about
94
94
 
95
95
  The only thing the substrate needs to know about a run's tenancy.
96
96
 
97
- A product's own context type satisfies this by having the two members; it keeps whatever else it wants (`AgentContext` keeps typed ids, a user id and `for_tenant`).
97
+ A product's own context type satisfies this by having the two members; it keeps whatever else it wants (typed ids, a user id, its own construction rule).
98
98
 
99
99
  ## Type aliases
100
100
 
@@ -138,13 +138,13 @@ Begin a run under `context`, and supply it to every invocation.
138
138
 
139
139
  The caller passes who is asking, what they asked, and the scope it runs under. **That scope is the PRODUCT's to derive** (engine ADR-0139): the substrate must not know what authenticated this run, so it takes the resolved scope rather than three identity rows it would have to re-read.
140
140
 
141
- **The obligation `AR-6` placed here therefore moves to the caller, and is not weaker for it**: the context must come from the authenticated session of THIS request, never from one remembered across requests. On the route that is structural -- `tenant: TenantDep` is a per-request dependency and the product's own `for_tenant` rule runs in the handler body -- which is why the door is still impossible to forget rather than merely documented.
141
+ **The obligation to bind the context per invocation therefore moves to the caller, and is not weaker for it**: the context must come from the authenticated session of THIS request, never from one remembered across requests. On a route that is structural -- the tenant is a per-request dependency and the product's own construction rule runs in the handler body -- which is why the door is still impossible to forget rather than merely documented.
142
142
 
143
- A `run_id` is minted when the caller has none, so a run is addressable from the moment it exists rather than from whenever somebody remembers to name it (`run-contract.md` obligation 1).
143
+ A `run_id` is minted when the caller has none, so a run is addressable from the moment it exists rather than from whenever somebody remembers to name it.
144
144
 
145
- **Tracing and accounting attach HERE, for the same reason the context does** (T-5a.4b): this is the only door, so it is the only place that cannot be forgotten. `settings=None` leaves both off and `accounting=None` is a no-op — the precedent `recording_usage` set, because accounting must never be the reason a user's work does not happen.
145
+ **Tracing and accounting attach HERE, for the same reason the context does**: this is the only door, so it is the only place that cannot be forgotten. `settings=None` leaves both off and `accounting=None` is a no-op — the precedent `recording_usage` set, because accounting must never be the reason a user's work does not happen.
146
146
 
147
- **`continuation` must already be RESOLVED** (`AR-12`, T-5a.10). It is typed `Any` only because the harness must not import its own models into this module's signature dance; `render_continuation` refuses anything but a `ResolvedContinuation` by name, so a caller that skipped the workspace check gets `UnresolvedContinuation` here rather than a prompt full of the browser's claims.
147
+ **`continuation` must already be RESOLVED.** It is typed `Any` only because the harness must not import its own models into this module's signature dance; `render_continuation` refuses anything but a `ResolvedContinuation` by name, so a caller that skipped the workspace check gets `UnresolvedContinuation` here rather than a prompt full of the browser's claims.
148
148
 
149
149
  ### `resume_run(agent: 'Any', context: 'RunScope', *, answer: 'Any', run_id: 'str', settings: 'Any' = None, accounting: 'Any' = None) -> 'RunResult'`
150
150
 
@@ -160,17 +160,17 @@ Begin a run and yield `(run_id, namespace, mode, chunk)` as it happens.
160
160
 
161
161
  **The streaming sibling of `start_run`, and it carries the same guarantees** — the context, the trace and both ledgers — because they attach here rather than at the call site. A surface that streamed through `agent.astream` directly would lose all three and look like it worked.
162
162
 
163
- `subgraphs=True` is what makes a subagent's output distinguishable from the main agent's; without it every event arrives flat and `AR-18`'s cards have nothing to index on. Two stream modes are requested, so langgraph yields **3-tuples** rather than 2 — verified, not assumed.
163
+ `subgraphs=True` is what makes a subagent's output distinguishable from the main agent's; without it every event arrives flat and a client's per-subagent cards have nothing to index on. Two stream modes are requested, so langgraph yields **3-tuples** rather than 2 — verified, not assumed.
164
164
 
165
- **`continuation` is built the same way `start_run` builds it**, through `_opening_turn`. Two doors would mean two chances to forget the view, and the streaming one is the door the product actually uses — so a continuation that only worked on `start_run` would be a feature with no users (`AR-12`).
165
+ **`continuation` is built the same way `start_run` builds it**, through `_opening_turn`. Two doors would mean two chances to forget the view, and the streaming one is the door the product actually uses — so a continuation that only worked on `start_run` would be a feature with no users.
166
166
 
167
167
  ### `read_run(agent: 'Any', context: 'RunScope', *, run_id: 'str') -> 'RunResult | None'`
168
168
 
169
- Where a run got to, by its id alone — or `None` if it is not this matter's (T-5a.4c-iii).
169
+ Where a run got to, by its id alone — or `None` if it is not this scope's.
170
170
 
171
- **`run-contract.md` obligation 1, cashed:** *"the run is addressable, and its region renders from an id alone, never from in-memory state that a reload destroys."* A reload, a second tab, or a deploy all arrive here.
171
+ **The run is addressable, cashed:** *"the run is addressable, and its region renders from an id alone, never from in-memory state that a reload destroys."* A reload, a second tab, or a deploy all arrive here.
172
172
 
173
- **`None` covers three cases deliberately** — no such run, another matter's run, and a run id that was never started. Not by comparing afterwards: the thread id is derived from the workspace, so another matter's run does not resolve to a thread at all. The checkpointer itself has no tenancy and cannot be given any, so the isolation has to be in the key.
173
+ **`None` covers three cases deliberately** — no such run, another scope's run, and a run id that was never started. Not by comparing afterwards: the thread id is derived from the scope, so another scope's run does not resolve to a thread at all. The checkpointer itself has no tenancy and cannot be given any, so the isolation has to be in the key.
174
174
 
175
175
  **State, not replay.** This returns where the run got to; it does not re-emit the events that got it there. A reloading client renders the state and reconnects for what follows, which is enough for obligation 1 and is measurably cheaper than storing and replaying a transcript. If the surface turns out to need replay, the checkpointer keeps the history and `alist` is where that would come from — decided then, with a real surface to measure against, rather than guessed now.
176
176
 
@@ -186,37 +186,37 @@ What a run's stored state says became of it.
186
186
 
187
187
  ### `thread_for(context: 'RunScope', run_id: 'str') -> 'str'`
188
188
 
189
- The checkpointer thread a run lives in, **scoped to its matter**.
189
+ The checkpointer thread a run lives in, **keyed by its scope**.
190
190
 
191
- **The checkpointer has no tenancy and cannot be given any.** `aget_tuple` keys on `thread_id` and `checkpoint_ns` alone — verified in the installed saver — so a bare run id is readable by anybody who can name it. That is exactly the hole T-2.4d closed on the jobs route, where a UUID in a URL was the whole access control and anybody holding a job id read its result across customers.
191
+ **The checkpointer has no tenancy and cannot be given any.** `aget_tuple` keys on `thread_id` and `checkpoint_ns` alone — verified in the installed saver — so a bare run id is readable by anybody who can name it. That is exactly the hole a jobs route can have, where a UUID in a URL is the whole access control and anybody holding a job id reads its result across customers.
192
192
 
193
- So the workspace is part of the key rather than a comparison somebody must remember afterwards. Another matter's run id does not resolve to a thread at all, which makes "not yours" and "no such run" the same non-answer **by construction** — the non-oracle property this codebase applies to documents, jobs, workspaces, sessions and checks, arrived at structurally for once instead of by a check.
193
+ So the scope is part of the key rather than a comparison somebody must remember afterwards. Another scope's run id does not resolve to a thread at all, which makes "not yours" and "no such run" the same non-answer **by construction** — the non-oracle property this codebase applies to documents, jobs, workspaces, sessions and checks, arrived at structurally for once instead of by a check.
194
194
 
195
195
  The run id stays the PUBLIC identity: it is what `usage_run.correlation_id` joins on and what a client keeps to reconnect. The thread id is ours and never leaves the process.
196
196
 
197
197
  ### `build_chat_agent(context: 'RunScope', resources: 'Any', settings: 'Any', *, model: 'Any' = None, definition: 'Any', checkpointer: 'Any' = None, store: 'Any' = None, ledger: 'Any' = None) -> 'Any'`
198
198
 
199
- The chat-manager for one run, holding the manifest bound to that run's matter.
199
+ The chat-manager for one run, holding the manifest bound to that run's scope.
200
200
 
201
- **The model is resolved through DeepAgents**, not built here: `AGENT_MODEL_SPEC` plus a registered `ProviderProfile` is the only combination that applies our OpenRouter configuration (T-5a.4a-ii found that `init_chat_model` silently ignores the profile).
201
+ **The model is resolved through DeepAgents**, not built here: `AGENT_MODEL_SPEC` plus a registered `ProviderProfile` is the only combination that applies the OpenRouter configuration (`init_chat_model` silently ignores the profile).
202
202
 
203
203
  **A `context_schema` is required, not conventional.** It comes from `definition.context_schema` -- the product's own context type, which the substrate never names -- and `start_run` refuses an agent without one, because an agent compiled with `context_schema=None` accepts `context=` and drops it silently.
204
204
 
205
- **The checkpointer defaults to in-memory, which is a real limitation.** `run-contract.md` obligation 1 says a run outlives the view that started it, and an in-memory saver does not outlive the process. A durable checkpointer is T-5a.4c's business, where re-attaching to a run by id is the requirement that forces it; passing one here is how that lands.
205
+ **The checkpointer defaults to in-memory, which is a real limitation.** A run outlives the view that started it, and an in-memory saver does not outlive the process. A durable checkpointer is the caller's to pass, and re-attaching to a run by id is the requirement that forces it.
206
206
 
207
207
  ### `build_orchestrator(context: 'Any', resources: 'Any', settings: 'Any', *, model: 'Any' = None, tools: 'Any' = None, system_prompt: 'str | None' = None, extra_middleware: 'list | None' = None, definition: 'Any', checkpointer: 'Any' = None, store: 'Any' = None, ledger: 'Any' = None) -> 'Any'`
208
208
 
209
209
  The planning tier, compiled as an agent in its own right.
210
210
 
211
- **`context_schema` is declared rather than inherited.** A compiled child does receive the parent's context without declaring it — pinned in `test_harness_grounding.py` — but declaring it is what lets this be driven DIRECTLY, which T-5a.12 does and which `start_run` refuses without the schema.
211
+ **`context_schema` is declared rather than inherited.** A compiled child does receive the parent's context without declaring it — pinned in `test_harness_grounding.py` — but declaring it is what lets this be driven DIRECTLY, which the orchestration eval does and which `start_run` refuses without the schema.
212
212
 
213
- `model`, `tools`, `system_prompt` and `extra_middleware` are overridable for tests and evals; **production passes none of them.** `system_prompt` and `extra_middleware` exist so T-5a.12b can run the two orchestration arms through the REAL builder rather than assembling its own agent -- an eval that builds its own would be measuring something the product does not ship.
213
+ `model`, `tools`, `system_prompt` and `extra_middleware` are overridable for tests and evals; **production passes none of them.** `system_prompt` and `extra_middleware` exist so an eval can run the two orchestration arms through the REAL builder rather than assembling its own agent -- an eval that builds its own would be measuring something the product does not ship.
214
214
 
215
215
  ### `agent_chat_model(settings: 'Any', model_id: 'str') -> 'Any'`
216
216
 
217
217
  The agent's chat model, built by the engine and bounded by our clocks.
218
218
 
219
- **`model_id` is a PARAMETER (T-7.58).** It used to be read from one product's setting name, in the substrate, so a second product's model could not be reached at all. Which profile to reason with is the product's declaration; bounding the call with our clocks is the substrate's job and is all that is left here.
219
+ **`model_id` is a PARAMETER.** It used to be read from one product's setting name, in the substrate, so a second product's model could not be reached at all. Which profile to reason with is the product's declaration; bounding the call with our clocks is the substrate's job and is all that is left here.
220
220
 
221
221
  **No `ProviderProfile`, and that removed a trap rather than just a dependency.** The old path handed DeepAgents a spec STRING and registered a profile to configure it. `deepagents._models.resolve_model` returns a pre-built `BaseChatModel` *unchanged* and applies its profile registry only to strings -- including, in its own words, "the OpenAI Responses API default". That default was ON, and with it on OpenRouter returns `object: "response"` and reports **no cost at all**, which is why this module carried `use_responses_api=False`. Passing an object retires the counter-measure with its cause.
222
222
 
@@ -226,7 +226,7 @@ The agent's chat model, built by the engine and bounded by our clocks.
226
226
 
227
227
  Time and trace one agent run, and hand it to `accounting` when it ends.
228
228
 
229
- `accounting` is anything with `collecting()`, `record(run_id=, since=, duration_ms=)` and `trace_metadata` -- the product supplies it (`operations.usage.AgentRunAccounting`). `None` disables recording without disabling the run.
229
+ `accounting` is anything with `collecting()`, `record(run_id=, since=, duration_ms=)` and `trace_metadata` -- the product supplies it. `None` disables recording without disabling the run.
230
230
 
231
231
  **`collecting()` is opened OUTSIDE the trace and the timer is started before both**, which preserves the original order: the engine work a tool causes is collected through the caller's ContextVar for the whole run, including the setup the trace does not cover.
232
232
 
@@ -246,19 +246,19 @@ The run's thread id: its scope and its run id, composed.
246
246
 
247
247
  **Not the run id alone.** The run id is the PUBLIC identity a client keeps; the thread is ours and never leaves the process, and keying it by scope is what makes a guessed run id from another tenant resolve to nothing by construction.
248
248
 
249
- ### `worker_spec(name: 'str', description: 'str', prompt: 'str', tools: 'list', report: 'type', ledger: 'Any' = None, *, retry_on: 'tuple[type[BaseException], ...]' = (), message_for: 'Any' = None, signposts: 'Any' = None, repeatable: 'frozenset[str]' = frozenset(), question_argument: 'dict[str, str] | None' = None, framings: 'tuple[str, ...]' = (), carry_forward: 'Any' = None, read_framing: 'Any' = None) -> 'dict[str, Any]'`
249
+ ### `worker_spec(name: 'str', description: 'str', prompt: 'str', tools: 'list', report: 'type', ledger: 'Any' = None, *, retry_on: 'tuple[type[BaseException], ...]' = (), message_for: 'Any' = None, signposts: 'Any' = None, repeatable: 'frozenset[str]' = frozenset(), question_argument: 'dict[str, str] | None' = None, framings: 'tuple[str, ...]' = (), carry_forward: 'Any' = None, read_framing: 'Any' = None, definition: 'Any' = None) -> 'dict[str, Any]'`
250
250
 
251
251
  A `SubAgent` spec, deliberately the opposite choice from the orchestrator's `CompiledSubAgent`.
252
252
 
253
253
  A worker has no middleware and no subagents of its own, so letting the parent build it keeps one model resolution and one place that knows how a tier is compiled.
254
254
 
255
- **No `ask_the_user` in any worker's tools**, and that absence is the mechanism (`AR-16`): a prompt saying "do not ask" is a suggestion; a tool the worker was never given is a fact.
255
+ **Pass `definition=`, the product's `AgentDefinition`.** Every policy parameter after `ledger` defaults to something inert, and all of them but `signposts` are fields of that definition (`signposts` is its `prompts`). With a definition, each parameter left at its inert default is taken from it; a value passed explicitly still wins. Without one, a worker runs with no retries, no repeat suppression and no decision recording, and nothing fails to say so.
256
256
 
257
257
  ### `clarification_tool() -> 'BaseTool'`
258
258
 
259
259
  A tool whose entire body is a question.
260
260
 
261
- Returned from a factory for symmetry with the manifest's bindings, though it closes over nothing: a clarification has no tenancy to bind, because it touches no matter's data.
261
+ Returned from a factory for symmetry with the manifest's bindings, though it closes over nothing: a clarification has no tenancy to bind, because it touches no scoped data.
262
262
 
263
263
  ### `translate(namespace: 'Any', mode: 'str', chunk: 'Any') -> 'list[RunEvent]'`
264
264
 
@@ -268,7 +268,7 @@ Turn one streamed item into zero or more events for the client.
268
268
 
269
269
  ### `what_was_finished(result: 'Any') -> 'list[RunEvent]'`
270
270
 
271
- What to tell the client about a run that did not finish (T-5a.15b).
271
+ What to tell the client about a run that did not finish.
272
272
 
273
273
  **The route already stated the principle and did not honour it for failures:** *"a stream that stops is not a stream that finished. Without a terminal event a client cannot tell a completed answer from a dropped connection."* On a cut-off run the stream simply stopped -- no partial, no explanation, not even the terminating frame -- so it looked exactly like a dropped connection.
274
274
 
@@ -284,17 +284,17 @@ The stack, inner-first.
284
284
 
285
285
  `ToolRetryMiddleware` carries `on_failure="error"` so a failure that exhausts its retries becomes an exception the error middleware can see — rather than a message the model receives without anybody having retried.
286
286
 
287
- **Both arguments are the PRODUCT's and are required (T-7.58).** This imported one product's retry set and `message_for` directly, so the substrate held that product's judgement about what is recoverable -- and a greenfield product retrying a mill feed got the first product's client exception types and its domain errors. **No defaults**, deliberately: a default retry set is one a second product inherits without noticing, and `retry_on` defaulting to anything is how `Exception` creeps back in and a scope violation gets re-attempted with backoff.
287
+ **Both arguments are the PRODUCT's and are required.** This imported one product's retry set and `message_for` directly, so the substrate held that product's judgement about what is recoverable -- and a greenfield product retrying a mill feed got the first product's client exception types and its domain errors. **No defaults**, deliberately: a default retry set is one a second product inherits without noticing, and `retry_on` defaulting to anything is how `Exception` creeps back in and a scope violation gets re-attempted with backoff.
288
288
 
289
289
  The deadline exceptions are the HARNESS's own (above in this module), because `ADeadlineForOneModelTurn` is what raises them. A product chooses whether its own `retry_on` includes `ModelAttemptTooSlow`; ours does, and deliberately omits `ModelTurnTooSlow`.
290
290
 
291
291
  ### `dispatched_more_than_once(recording: 'dict[str, Any]') -> 'str | None'`
292
292
 
293
- A worker covering the whole matter, run once per document.
293
+ A worker covering the whole scope, run once per document.
294
294
 
295
295
  ### `reached_for_the_filesystem(recording: 'dict[str, Any]') -> 'str | None'`
296
296
 
297
- Tried to open the matter's documents as files.
297
+ Tried to open the subject documents as files.
298
298
 
299
299
  ### `wrote_a_program_for_a_single_call(recording: 'dict[str, Any]') -> 'str | None'`
300
300
 
@@ -109,6 +109,11 @@ and how to manage workspaces.
109
109
  deployment serves a single model; OCR resolves its endpoint and flags through the same profile as every other
110
110
  call. Override one role with `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_VISION_OCR`, `RAG_MODEL_GENERAL`), or every
111
111
  role at once with `RAG_MODEL_ALL`; the role-specific variable wins.
112
+ - **Blank PDF pages** are never sent to `VISION_OCR` (0.13.0, PS-46): a page with no ink has nothing to read, and a
113
+ vision model asked to transcribe one invents a page. A parse cached by an earlier engine with `VISION_OCR`
114
+ configured may still hold such text: `find_blank_pages_with_text(cache_dir, sources)` lists every page that is
115
+ blank in the source PDF but has text in its cached parse (files embedded in a parsed package are found in the
116
+ cache without being passed). Delete each finding's `cache_files`, then re-ingest the document.
112
117
  - **Structured output** is client-side tag-parse (ADR-0045); any provider flags live in the profile.
113
118
  - **A self-hosted Qwen server**: see [A self-hosted model server](#a-self-hosted-model-server-qwen-on-modal) below.
114
119
  - **Decision models** (e.g. Jev) are reached through a `DecisionModelProfile` (default `jev-1.13`;
@@ -151,7 +156,8 @@ chat-manager tier, an orchestrator and dispatched workers on Deep Agents, with t
151
156
  retries, interrupts and resume, memory, metering and run grading. The product declares an `AgentDefinition` (its
152
157
  `ToolSurface`, planning split, workers, a context type satisfying `RunScope`, retry set, model id and `AgentPrompts`)
153
158
  and runs it with `start_run` / `resume_run` / `stream_run`; it passes its own checkpointer and memory store. The
154
- reference is `docs/api/harness.md`, and the `building-an-agent-harness` skill is the practice behind it.
159
+ design reference, with every field a product declares, is [`harness.md`](harness.md); the generated
160
+ signatures are `docs/api/harness.md`, and the `building-an-agent-harness` skill is the practice behind it.
155
161
 
156
162
  Its configuration is the engine's: the model by engine profile id (the definition's `model_id_for`), tracing by
157
163
  `RAG_TRACE_LEVEL` and the Langfuse keys (each agent turn is one generation, labelled `agent-llm`, grouped under the
@@ -42,7 +42,7 @@ ADR-0117/0118 engine API + capability runtime). Read [Concepts](../concepts.md)
42
42
  (segmenter, span tagger, unit grouper, boundary decider, writer, a per-document hook)
43
43
  → [KG construction](kg-construction.md) and the `building-an-ingestion-capability` skill. Your query graphs, domain functions, and skills **compose the engine's
44
44
  generic primitives from the public tiers** (graph reads and query, embedding, typed ranking, reranking,
45
- answers, parsing, chunking; hybrid search and fusion are not public yet, gap G24) and register only your OWN domain graphs/models/skills via `register_capability(manifest)` with an
45
+ answers, parsing, chunking, and hybrid span search with `span_search`) and register only your OWN domain graphs/models/skills via `register_capability(manifest)` with an
46
46
  `impl_ref`, invocable (and MCP-exposable) with zero engine edits. Package them as a pack module that exposes
47
47
  `register()` and load it with `load_pack("<your module>")`.
48
48
  → [Authoring capabilities](authoring-capabilities.md).
@@ -190,7 +190,7 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
190
190
  - **Table rows:** `table_rows(source_document)` returns every parsed table's rows as exact cells (`TableRow`), and a
191
191
  one-row unit carries its row as `Unit.table_row` (ING-7).
192
192
 
193
- ### G24: No public hybrid search or fusion primitive
193
+ ### G24: No public hybrid search or fusion primitive (closed)
194
194
  - **Where:** the engine's own retrieval legs run hybrid (dense + sparse) span search and rank fusion internally, and
195
195
  the authoring guide used to say a capability composes them "by direct import"; neither is on `rag_wright.api` or
196
196
  `rag_wright.pack_sdk`.
@@ -199,6 +199,10 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
199
199
  what it embeds itself, beside a structured leg (`kg_read`, `typed_constraint_match_rank`).
200
200
  - **Proposed:** a public hybrid span search over a workspace (query text, filters, k) returning cited spans, with the
201
201
  fusion and reranking it already applies; on `rag_wright.pack_sdk` for pack capabilities.
202
+ - **Closed by PS-45:** `span_search(ws, query, *, k, documents, tag, dense_floor)` and `aspan_search` on
203
+ `rag_wright.api` (which pack code may also import): the store-side RRF fusion of the dense and sparse span
204
+ legs plus the dense floor (ADR-0104), returning citation-ready `SpanHit`s. Reranking stays the caller's
205
+ (`BGEReranker`), as it was in the engine's own leg.
202
206
  - Surfaced: the TexWright specification (2026-10-14).
203
207
 
204
208
  ## Prerequisites a domain provides (not engine gaps)
@@ -114,9 +114,10 @@ slug. Write good `representative_queries` (2–5, phrased like real tasks) — t
114
114
  Your capabilities **compose the engine's generic primitives from the public tiers** (`rag_wright.api` and
115
115
  `rag_wright.pack_sdk`: the knowledge-graph reads `kg_read` / `kg_edges`, graph query, embedding (`ws.embedder`,
116
116
  `cosine`), typed ranking (`typed_constraint_match_rank`), reranking (`BGEReranker`), answers (`agenerate_answer`,
117
- `ajudge_spans`), parsing and chunking); you register only your OWN domain graphs/models/skills. Don't wrap or
118
- re-register an engine primitive. Hybrid (dense + sparse) span search and rank fusion are not public yet (engine gap
119
- G24): check a primitive is on a tier before designing around it.
117
+ `ajudge_spans`), hybrid span search (`span_search` / `aspan_search`: the dense and sparse legs fused in the store,
118
+ with a dense floor, returning cited spans), parsing and chunking); you register only your OWN domain
119
+ graphs/models/skills. Don't wrap or re-register an engine primitive, and check a primitive is on a tier before
120
+ designing around it.
120
121
 
121
122
  ## Definition of done
122
123