rag-wright 0.9.0__tar.gz → 0.10.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 (1063) hide show
  1. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/authoring-a-capability/SKILL.md +2 -2
  2. rag_wright-0.10.0/.claude/skills/building-an-agent-harness/SKILL.md +607 -0
  3. {rag_wright-0.9.0/src/rag_wright/.agents → rag_wright-0.10.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +5 -4
  4. rag_wright-0.10.0/.release-please-manifest.json +3 -0
  5. {rag_wright-0.9.0 → rag_wright-0.10.0}/CHANGELOG.md +8 -0
  6. {rag_wright-0.9.0 → rag_wright-0.10.0}/CLAUDE.md +8 -1
  7. {rag_wright-0.9.0 → rag_wright-0.10.0}/PKG-INFO +3 -1
  8. rag_wright-0.10.0/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +184 -0
  9. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/api/README.md +27 -3
  10. rag_wright-0.10.0/docs/api/harness.md +309 -0
  11. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/api/pack_sdk.md +0 -16
  12. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/architecture.md +3 -1
  13. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/configuration.md +21 -1
  14. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/README.md +3 -2
  15. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/_engine-gaps.md +3 -1
  16. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/plan.md +2 -1
  17. rag_wright-0.10.0/docs/specs/public-surface/rulewright-migration-0.10.0.md +65 -0
  18. rag_wright-0.10.0/docs/specs/public-surface/rulewright-migration-0.9.0.md +72 -0
  19. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/templates/product-starter/CLAUDE.md.template +7 -5
  20. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/templates/product-starter/README.md +1 -1
  21. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/templates/product-starter/playbook.md.template +1 -1
  22. {rag_wright-0.9.0 → rag_wright-0.10.0}/pyproject.toml +49 -1
  23. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/build_api_docs.py +12 -0
  24. rag_wright-0.10.0/scripts/measure_harness_genericity.py +213 -0
  25. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +2 -2
  26. rag_wright-0.10.0/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +607 -0
  27. {rag_wright-0.9.0/.claude → rag_wright-0.10.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +5 -4
  28. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/__init__.py +5 -1
  29. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/agents.py +6 -3
  30. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/tracing.py +6 -2
  31. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/workspace.py +10 -4
  32. rag_wright-0.10.0/src/rag_wright/harness/__init__.py +66 -0
  33. rag_wright-0.10.0/src/rag_wright/harness/accounting.py +80 -0
  34. rag_wright-0.10.0/src/rag_wright/harness/agent.py +146 -0
  35. rag_wright-0.10.0/src/rag_wright/harness/batch.py +115 -0
  36. rag_wright-0.10.0/src/rag_wright/harness/clarify.py +72 -0
  37. rag_wright-0.10.0/src/rag_wright/harness/confirm.py +92 -0
  38. rag_wright-0.10.0/src/rag_wright/harness/decisions.py +534 -0
  39. rag_wright-0.10.0/src/rag_wright/harness/definition.py +109 -0
  40. rag_wright-0.10.0/src/rag_wright/harness/dispatch.py +171 -0
  41. rag_wright-0.10.0/src/rag_wright/harness/errors.py +236 -0
  42. rag_wright-0.10.0/src/rag_wright/harness/events.py +148 -0
  43. rag_wright-0.10.0/src/rag_wright/harness/filesystem.py +184 -0
  44. rag_wright-0.10.0/src/rag_wright/harness/grading.py +568 -0
  45. rag_wright-0.10.0/src/rag_wright/harness/interpreter.py +100 -0
  46. rag_wright-0.10.0/src/rag_wright/harness/memory.py +171 -0
  47. rag_wright-0.10.0/src/rag_wright/harness/models.py +480 -0
  48. rag_wright-0.10.0/src/rag_wright/harness/rules.py +266 -0
  49. rag_wright-0.10.0/src/rag_wright/harness/runs.py +439 -0
  50. rag_wright-0.10.0/src/rag_wright/harness/scope.py +128 -0
  51. rag_wright-0.10.0/src/rag_wright/harness/seen.py +505 -0
  52. rag_wright-0.10.0/src/rag_wright/harness/skills.py +63 -0
  53. rag_wright-0.10.0/src/rag_wright/harness/thinking.py +85 -0
  54. rag_wright-0.10.0/src/rag_wright/harness/tiers.py +344 -0
  55. rag_wright-0.10.0/src/rag_wright/harness/tracing.py +119 -0
  56. rag_wright-0.10.0/src/rag_wright/harness/withhold.py +134 -0
  57. rag_wright-0.10.0/src/rag_wright/harness/workers.py +343 -0
  58. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/seam.py +8 -6
  59. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/tracing.py +12 -0
  60. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/pack_sdk/__init__.py +9 -4
  61. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +3 -3
  62. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +2 -1
  63. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +1 -1
  64. {rag_wright-0.9.0 → rag_wright-0.10.0}/tasks.md +11 -1
  65. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_agent_chat_model.py +10 -0
  66. rag_wright-0.10.0/tests/api/test_api_embedder_ps39.py +31 -0
  67. rag_wright-0.10.0/tests/api/test_tracing_helpers_ps32.py +30 -0
  68. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_api_docs_current.py +8 -0
  69. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_shipped_skills.py +1 -0
  70. rag_wright-0.10.0/tests/harness/test_greenfield_conformance.py +432 -0
  71. rag_wright-0.10.0/tests/harness/test_harness_accounting.py +115 -0
  72. rag_wright-0.10.0/tests/harness/test_harness_engine_wiring.py +94 -0
  73. rag_wright-0.10.0/tests/harness/test_harness_genericity.py +207 -0
  74. rag_wright-0.10.0/tests/harness/test_harness_live.py +48 -0
  75. rag_wright-0.10.0/tests/harness/test_harness_recorder.py +142 -0
  76. rag_wright-0.10.0/tests/harness/test_harness_thinking.py +197 -0
  77. rag_wright-0.10.0/tests/util/__init__.py +0 -0
  78. {rag_wright-0.9.0 → rag_wright-0.10.0}/uv.lock +5 -1
  79. rag_wright-0.9.0/.release-please-manifest.json +0 -3
  80. rag_wright-0.9.0/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -95
  81. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/settings.json +0 -0
  82. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
  83. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  84. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/creating-evals/SKILL.md +0 -0
  85. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/laya/SKILL.md +0 -0
  86. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  87. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  88. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  89. {rag_wright-0.9.0 → rag_wright-0.10.0}/.claude/skills/setfit/SKILL.md +0 -0
  90. {rag_wright-0.9.0 → rag_wright-0.10.0}/.env.example +0 -0
  91. {rag_wright-0.9.0 → rag_wright-0.10.0}/.github/workflows/publish.yml +0 -0
  92. {rag_wright-0.9.0 → rag_wright-0.10.0}/.github/workflows/release-please.yml +0 -0
  93. {rag_wright-0.9.0 → rag_wright-0.10.0}/.gitignore +0 -0
  94. {rag_wright-0.9.0 → rag_wright-0.10.0}/LICENSE +0 -0
  95. {rag_wright-0.9.0 → rag_wright-0.10.0}/README.md +0 -0
  96. {rag_wright-0.9.0 → rag_wright-0.10.0}/SPEC.md +0 -0
  97. {rag_wright-0.9.0 → rag_wright-0.10.0}/conftest.py +0 -0
  98. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  99. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/ArcadeDB_Local.md +0 -0
  100. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/OBSERVABILITY.md +0 -0
  101. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  102. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  103. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  104. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  105. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0005-relational-golden-set.md +0 -0
  106. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0006-model-profile.md +0 -0
  107. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  108. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  109. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  110. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  111. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  112. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  113. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  114. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  115. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  116. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  117. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  118. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  119. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  120. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  121. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  122. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  123. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  124. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  125. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  126. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  127. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  128. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  129. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  130. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  131. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  132. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  133. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  134. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  135. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  136. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  137. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  138. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  139. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  140. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  141. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  142. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  143. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  144. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  145. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  146. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  147. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  148. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  149. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  150. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  151. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  152. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  153. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  154. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  155. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  156. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  157. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  158. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  159. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  160. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  161. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  162. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  163. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  164. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  165. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  166. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  167. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  168. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  169. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  170. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  171. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  172. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  173. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  174. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  175. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  176. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  177. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  178. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  179. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  180. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  181. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  182. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  183. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  184. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  185. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  186. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  187. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  188. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  189. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  190. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  191. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  192. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  193. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  194. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  195. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0095-span-page-provenance.md +0 -0
  196. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  197. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  198. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  199. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  200. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  201. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  202. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  203. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  204. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  205. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  206. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  207. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  208. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  209. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  210. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  211. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  212. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  213. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  214. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  215. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  216. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  217. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  218. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  219. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  220. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  221. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  222. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  223. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  224. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  225. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  226. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  227. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  228. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  229. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  230. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  231. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  232. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  233. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  234. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  235. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  236. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  237. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  238. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  239. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/adr/README.md +0 -0
  240. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  241. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/README.md +0 -0
  242. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  243. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  244. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  245. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  246. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  247. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  248. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  249. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  250. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  251. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  252. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  253. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  254. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  255. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  256. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  257. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  258. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  259. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  260. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  261. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  262. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  263. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  264. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  265. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  266. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  267. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  268. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  269. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  270. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  271. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  272. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  273. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  274. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  275. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  276. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  277. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  278. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  279. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  280. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  281. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  282. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  283. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  284. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  285. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  286. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  287. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  288. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  289. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  290. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  291. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  292. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  293. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  294. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  295. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  296. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  297. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  298. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  299. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  300. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  301. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  302. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  303. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/misc/.gitkeep +0 -0
  304. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  305. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/async-migration.md +0 -0
  306. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/demo_plan.md +0 -0
  307. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  308. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  309. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  310. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  311. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  312. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  313. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/concepts.md +0 -0
  314. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/contract_pipeline_explainer.md +0 -0
  315. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/corpus_ingest_recipe.md +0 -0
  316. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  317. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  318. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  319. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  320. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/kg-construction.md +0 -0
  321. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
  322. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/classifier_model_ab.md +0 -0
  323. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/compliance_demo.md +0 -0
  324. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/compliance_gate_cc7.md +0 -0
  325. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  326. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  327. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/dg_model_ab.md +0 -0
  328. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/function_gate_recall.md +0 -0
  329. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  330. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  331. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/ocr_benchmark.md +0 -0
  332. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/prod1_readiness.md +0 -0
  333. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/prod2_readiness.md +0 -0
  334. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/query_side_model_ab.md +0 -0
  335. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  336. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/silver_provider_routing.md +0 -0
  337. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  338. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/evals.md +0 -0
  339. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/installation.md +0 -0
  340. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/playbook.md +0 -0
  341. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/capability_profiles.md +0 -0
  342. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/contracts_product_roadmap.md +0 -0
  343. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/engine-api-migration-handoff.md +0 -0
  344. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/engine_async_api.md +0 -0
  345. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/new-domain-build-sequence.md +0 -0
  346. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/product/seam-adaptation-guide.md +0 -0
  347. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  348. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  349. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  350. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/proposals/ontology-induction.md +0 -0
  351. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/quickstart.md +0 -0
  352. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/reference-pack.md +0 -0
  353. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/releasing.md +0 -0
  354. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/engine-platform/SPEC.md +0 -0
  355. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/engine-platform/TASKS.md +0 -0
  356. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/engine-prep/plan.md +0 -0
  357. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/evals/plan.md +0 -0
  358. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  359. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  360. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  361. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  362. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
  363. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  364. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  365. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  366. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  367. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  368. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  369. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  370. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/templates/product-starter/dependabot.yml +0 -0
  371. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  372. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  373. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  374. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  375. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  376. {rag_wright-0.9.0 → rag_wright-0.10.0}/docs/workspaces.md +0 -0
  377. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/__init__.py +0 -0
  378. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/acord.py +0 -0
  379. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/acord_retrieval.py +0 -0
  380. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/boundary_residue_gold.py +0 -0
  381. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/build_golden.py +0 -0
  382. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  383. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  384. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  385. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  386. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/condensed_pipeline.py +0 -0
  387. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/contract_parity_live.py +0 -0
  388. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/contractnli_judge.py +0 -0
  389. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/cuad_highlight.py +0 -0
  390. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/embedded_eval.py +0 -0
  391. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/full_pipeline_rerank.py +0 -0
  392. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/function_ceiling.py +0 -0
  393. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/function_property_rerank.py +0 -0
  394. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/function_rerank.py +0 -0
  395. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/gate1_chunker_ab.py +0 -0
  396. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/gate2_hybrid_rerank.py +0 -0
  397. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/golden/relational/set.json +0 -0
  398. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/golden.py +0 -0
  399. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/ground_discriminator_rerank.py +0 -0
  400. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/harness.py +0 -0
  401. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/ingestion_live_smoke.py +0 -0
  402. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/kg_primary.py +0 -0
  403. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/kg_property_rerank.py +0 -0
  404. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/listwise_rerank.py +0 -0
  405. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/multihop.py +0 -0
  406. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/nl_to_type.py +0 -0
  407. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/relational_eval.py +0 -0
  408. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/residual_decision_gold.py +0 -0
  409. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/segmenter_eval.py +0 -0
  410. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/semantic_judge_gold.py +0 -0
  411. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/test_acord.py +0 -0
  412. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/test_acord_retrieval.py +0 -0
  413. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/test_harness.py +0 -0
  414. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/test_multihop_set.py +0 -0
  415. {rag_wright-0.9.0 → rag_wright-0.10.0}/eval/unit_grouper_eval.py +0 -0
  416. {rag_wright-0.9.0 → rag_wright-0.10.0}/examples/model_server.py +0 -0
  417. {rag_wright-0.9.0 → rag_wright-0.10.0}/examples/quickstart.py +0 -0
  418. {rag_wright-0.9.0 → rag_wright-0.10.0}/plan.md +0 -0
  419. {rag_wright-0.9.0 → rag_wright-0.10.0}/release-please-config.json +0 -0
  420. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ab_model_overlap.py +0 -0
  421. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acord_unify.py +0 -0
  422. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_acord.py +0 -0
  423. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_cuad.py +0 -0
  424. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_ecfr.py +0 -0
  425. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_edgar.py +0 -0
  426. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_ftc_255.py +0 -0
  427. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/acquire_prod1_corpus.py +0 -0
  428. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/audit_reclass_flips.py +0 -0
  429. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/author_leg_a_silver_key.py +0 -0
  430. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/backfill_affiliations.py +0 -0
  431. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/backfill_clause_span_id.py +0 -0
  432. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  433. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/backup_kg_to_gcs.sh +0 -0
  434. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/bootstrap_template_capture.py +0 -0
  435. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/bootstrap_typed_edges.py +0 -0
  436. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/build_api_docs.sh +0 -0
  437. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/build_cuad_clause_cache.py +0 -0
  438. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/build_function_routing_map.py +0 -0
  439. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_assemble_v2.py +0 -0
  440. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_assemble_v3.py +0 -0
  441. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  442. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_generate_hard_positives.py +0 -0
  443. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_generate_training.py +0 -0
  444. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_hybrid.py +0 -0
  445. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_hybrid2.py +0 -0
  446. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_jev_actor.py +0 -0
  447. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_jev_claimtypes.py +0 -0
  448. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_jev_operative.py +0 -0
  449. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_label_spans.py +0 -0
  450. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_laya_prep.py +0 -0
  451. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_laya_train.py +0 -0
  452. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_prep_operative.py +0 -0
  453. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_relabel_rubric.py +0 -0
  454. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_relabel_rubric2.py +0 -0
  455. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/cic1_train_operative.py +0 -0
  456. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/compare_extraction_models.py +0 -0
  457. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  458. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/compliance_engine_smoke.py +0 -0
  459. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/compliance_policy_demo.py +0 -0
  460. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/curate_taxonomy_gaps.py +0 -0
  461. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/dg_model_ab.py +0 -0
  462. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  463. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  464. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  465. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_legs.py +0 -0
  466. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_pool.py +0 -0
  467. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_relstructure.py +0 -0
  468. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/diagnose_acord_retrieval.py +0 -0
  469. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/eval_all.py +0 -0
  470. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/eval_ce.py +0 -0
  471. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/eval_listwise_b.py +0 -0
  472. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/export_ce_dataset.py +0 -0
  473. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/extract_features.py +0 -0
  474. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/listwise_variants.py +0 -0
  475. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/relational_features.py +0 -0
  476. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/train_ce.py +0 -0
  477. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/distill/train_modal.py +0 -0
  478. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/enrich_edgar_candidates.py +0 -0
  479. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/eval_chunking_ab.py +0 -0
  480. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  481. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/eval_compliance_gold.py +0 -0
  482. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/extract_arcadedb_docs.py +0 -0
  483. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/fetch_reference_models.py +0 -0
  484. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/generate_contract_python.py +0 -0
  485. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/git_post_commit_graphify.sh +0 -0
  486. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/granite_chunker_assess.py +0 -0
  487. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/graph_status.sh +0 -0
  488. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_acord.py +0 -0
  489. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  490. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  491. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_compliance_prod2.py +0 -0
  492. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_cuad.py +0 -0
  493. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_cuad_full.py +0 -0
  494. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_ftc_compliance.py +0 -0
  495. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_prod1.py +0 -0
  496. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_prod1_async.py +0 -0
  497. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ingest_smoke.py +0 -0
  498. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/install_git_hooks.sh +0 -0
  499. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/label_new_functions.py +0 -0
  500. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/legb_function_gate_recall.py +0 -0
  501. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/make_compliance_fixtures.py +0 -0
  502. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/make_compliance_gold.py +0 -0
  503. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  504. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  505. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  506. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/measure_generation_robustness.py +0 -0
  507. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/measure_silver.py +0 -0
  508. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/merge_docs_into_framework.py +0 -0
  509. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  510. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  511. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  512. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/migrate_span_fields.py +0 -0
  513. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/mine_scarce_functions.py +0 -0
  514. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_arcadedb.py +0 -0
  515. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_backfill.py +0 -0
  516. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_exception_linking.py +0 -0
  517. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_gemma4_vllm.py +0 -0
  518. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  519. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_granite_server.py +0 -0
  520. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_granite_throughput.py +0 -0
  521. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_granite_vllm_server.py +0 -0
  522. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_query_app.py +0 -0
  523. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  524. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  525. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  526. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/modal_stack_a100.py +0 -0
  527. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ocr_benchmark.py +0 -0
  528. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ocr_preprocess.py +0 -0
  529. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/ontology_dimension_check.py +0 -0
  530. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/phase_a_leg_validate.py +0 -0
  531. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/populate_clause_kg.py +0 -0
  532. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/populate_entity_graph.py +0 -0
  533. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/populate_entity_graph_extracted.py +0 -0
  534. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/populate_property_store.py +0 -0
  535. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/prep_relational_verification.py +0 -0
  536. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/publish_manifests.py +0 -0
  537. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/reclassify_kg.py +0 -0
  538. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/refresh_framework_graph.sh +0 -0
  539. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/revert_reclass_flips.py +0 -0
  540. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/run_acord_retrieval.py +0 -0
  541. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/run_clause_exception_linking.py +0 -0
  542. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/semantic_judge_live_validate.py +0 -0
  543. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/semantic_judge_probe.py +0 -0
  544. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/snapshot_leg_a_eval.py +0 -0
  545. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/stack_correctness_validate.py +0 -0
  546. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/table_retrieval_smoke.py +0 -0
  547. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/train_function_classifier.py +0 -0
  548. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/train_legalbert_function.py +0 -0
  549. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/train_legalbert_modal.py +0 -0
  550. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/typed_rerank_validate.py +0 -0
  551. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/verify_wheel_install.sh +0 -0
  552. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/vllm_extraction_ab.py +0 -0
  553. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/vllm_kg_query_validate.py +0 -0
  554. {rag_wright-0.9.0 → rag_wright-0.10.0}/scripts/vllm_raw_diagnostic.py +0 -0
  555. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +0 -0
  556. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  557. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  558. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  559. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  560. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  561. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  562. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  563. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/__init__.py +0 -0
  564. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/answers.py +0 -0
  565. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/config.py +0 -0
  566. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/discover.py +0 -0
  567. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/documents.py +0 -0
  568. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/ids.py +0 -0
  569. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/invoke.py +0 -0
  570. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/kg.py +0 -0
  571. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/mcp.py +0 -0
  572. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/api/usage.py +0 -0
  573. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/__init__.py +0 -0
  574. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
  575. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/ard.py +0 -0
  576. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  577. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  578. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  579. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  580. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  581. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/embedding.py +0 -0
  582. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  583. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  584. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/fusion.py +0 -0
  585. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  586. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  587. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  588. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/invoke.py +0 -0
  589. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  590. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/manifests.py +0 -0
  591. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/parsing.py +0 -0
  592. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/registry.py +0 -0
  593. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  594. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/reranking.py +0 -0
  595. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  596. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  597. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  598. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  599. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  600. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  601. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  602. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  603. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/__init__.py +0 -0
  604. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/chunk.py +0 -0
  605. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/evals.py +0 -0
  606. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/extraction.py +0 -0
  607. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/graph.py +0 -0
  608. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/identifiers.py +0 -0
  609. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/ingestion.py +0 -0
  610. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/provenance.py +0 -0
  611. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/contracts/span.py +0 -0
  612. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/corpus/__init__.py +0 -0
  613. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  614. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/corpus/document_parser.py +0 -0
  615. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/corpus/embedded.py +0 -0
  616. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/corpus/http.py +0 -0
  617. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/evals/__init__.py +0 -0
  618. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/evals/gold.py +0 -0
  619. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
  620. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/evals/runner.py +0 -0
  621. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/evals/scorers.py +0 -0
  622. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/__init__.py +0 -0
  623. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/builder.py +0 -0
  624. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/evaluate.py +0 -0
  625. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/group.py +0 -0
  626. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/layout.py +0 -0
  627. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/segment.py +0 -0
  628. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ingestion/tables.py +0 -0
  629. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/__init__.py +0 -0
  630. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/model_servers.py +0 -0
  631. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/profiles.py +0 -0
  632. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/tag_structured.py +0 -0
  633. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/usage.py +0 -0
  634. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/models/weights.py +0 -0
  635. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ontology/__init__.py +0 -0
  636. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  637. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/ontology/registry.py +0 -0
  638. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/__init__.py +0 -0
  639. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  640. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  641. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  642. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  643. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  644. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  645. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  646. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  647. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  648. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  649. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  650. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  651. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  652. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  653. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  654. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  655. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  656. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  657. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  658. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  659. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  660. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  661. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  662. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  663. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  664. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  665. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  666. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  667. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  668. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  669. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  670. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  671. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  672. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  673. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  674. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  675. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  676. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  677. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  678. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  679. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  680. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  681. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  682. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  683. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  684. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  685. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  686. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  687. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  688. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  689. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  690. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  691. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  692. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  693. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  694. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  695. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  696. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  697. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  698. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/options.py +0 -0
  699. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  700. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  701. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  702. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  703. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  704. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  705. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  706. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  707. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  708. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  709. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  710. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  711. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  712. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  713. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  714. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  715. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  716. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  717. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  718. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  719. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  720. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  721. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  722. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  723. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  724. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  725. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  726. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  727. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  728. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  729. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  730. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  731. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  732. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  733. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  734. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  735. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  736. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  737. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  738. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  739. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  740. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  741. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  742. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  743. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  744. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  745. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  746. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  747. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  748. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/packs/reference_seam.py +0 -0
  749. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/py.typed +0 -0
  750. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/__init__.py +0 -0
  751. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  752. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  753. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  754. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  755. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  756. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  757. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  758. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  759. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/spans/__init__.py +0 -0
  760. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/spans/page_map.py +0 -0
  761. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/store/__init__.py +0 -0
  762. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/store/arcadedb.py +0 -0
  763. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/store/chunk_text.py +0 -0
  764. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/store/seam.py +0 -0
  765. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  766. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  767. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/subgraphs/observability.py +0 -0
  768. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  769. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  770. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/util/__init__.py +0 -0
  771. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/util/concurrent.py +0 -0
  772. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/util/pdfium.py +0 -0
  773. {rag_wright-0.9.0 → rag_wright-0.10.0}/src/rag_wright/util/spacy_model.py +0 -0
  774. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/__init__.py +0 -0
  775. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/__init__.py +0 -0
  776. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_agent_chat_model_live.py +0 -0
  777. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_answers_exports.py +0 -0
  778. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_bytes_ingest.py +0 -0
  779. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_capability_reexports.py +0 -0
  780. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  781. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_discover.py +0 -0
  782. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_documents.py +0 -0
  783. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_drop_workspace.py +0 -0
  784. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_drop_workspace_live.py +0 -0
  785. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_e2e.py +0 -0
  786. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_invoke.py +0 -0
  787. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_kg.py +0 -0
  788. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_mcp.py +0 -0
  789. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_metering_tracing_exports.py +0 -0
  790. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_model_role_export.py +0 -0
  791. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_open_workspace_reconfig.py +0 -0
  792. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_options.py +0 -0
  793. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_pack_sdk.py +0 -0
  794. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_pack_store.py +0 -0
  795. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_pdf_page_count.py +0 -0
  796. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_public_gaps_ps38.py +0 -0
  797. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_usage.py +0 -0
  798. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_workspace.py +0 -0
  799. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/api/test_workspace_models.py +0 -0
  800. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  801. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_doc_references.py +0 -0
  802. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  803. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_import_contracts.py +0 -0
  804. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_lock_version.py +0 -0
  805. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  806. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/arch/test_pdfium_door.py +0 -0
  807. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/async_helpers.py +0 -0
  808. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/__init__.py +0 -0
  809. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  810. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_answer_generator.py +0 -0
  811. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  812. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  813. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_authoring_contract.py +0 -0
  814. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_chunk_read.py +0 -0
  815. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_chunk_write.py +0 -0
  816. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  817. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_claim_extraction.py +0 -0
  818. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  819. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  820. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_compliance_store.py +0 -0
  821. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  822. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  823. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  824. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  825. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_dg_adapter.py +0 -0
  826. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_dg_async.py +0 -0
  827. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_dg_extraction.py +0 -0
  828. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  829. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_dg_private.py +0 -0
  830. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_disambiguation.py +0 -0
  831. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_document_scope.py +0 -0
  832. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_embedding.py +0 -0
  833. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  834. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_entity_resolution.py +0 -0
  835. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  836. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_fusion.py +0 -0
  837. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_graph_extraction.py +0 -0
  838. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_graph_query.py +0 -0
  839. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_graph_storage.py +0 -0
  840. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_highlight_serve.py +0 -0
  841. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_hybrid_search.py +0 -0
  842. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_jev_decision.py +0 -0
  843. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_manifest_validation.py +0 -0
  844. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_manifests.py +0 -0
  845. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_parsing.py +0 -0
  846. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_parties_extraction.py +0 -0
  847. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  848. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  849. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_query_understanding.py +0 -0
  850. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_registry.py +0 -0
  851. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_remote_encoders.py +0 -0
  852. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_repair_partition.py +0 -0
  853. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  854. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_reranking.py +0 -0
  855. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_retrieval_core.py +0 -0
  856. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  857. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  858. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_rlm_method.py +0 -0
  859. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  860. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_runtime_registry.py +0 -0
  861. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_scan_quality.py +0 -0
  862. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  863. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  864. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  865. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  866. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  867. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  868. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/compliance_fakes.py +0 -0
  869. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/conftest.py +0 -0
  870. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/__init__.py +0 -0
  871. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  872. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_chunk_record.py +0 -0
  873. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_compliance.py +0 -0
  874. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  875. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_extraction.py +0 -0
  876. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_function.py +0 -0
  877. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_function_routing.py +0 -0
  878. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_identifiers.py +0 -0
  879. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  880. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_jurisdiction.py +0 -0
  881. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_ontology.py +0 -0
  882. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_property.py +0 -0
  883. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_provenance.py +0 -0
  884. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/contracts/test_value_match.py +0 -0
  885. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/__init__.py +0 -0
  886. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  887. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_canonicalize.py +0 -0
  888. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_cuad.py +0 -0
  889. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  890. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_document_parser.py +0 -0
  891. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_edgar.py +0 -0
  892. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_embedded.py +0 -0
  893. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  894. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_http.py +0 -0
  895. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_parse_wire2.py +0 -0
  896. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/corpus/test_selection.py +0 -0
  897. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/eval/test_contractnli_judge.py +0 -0
  898. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  899. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/eval/test_kg_property_rerank.py +0 -0
  900. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  901. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/eval/test_relational_eval.py +0 -0
  902. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/__init__.py +0 -0
  903. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_gold_contracts.py +0 -0
  904. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_gold_import.py +0 -0
  905. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_langfuse_backend.py +0 -0
  906. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_runner.py +0 -0
  907. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_scorer_parity.py +0 -0
  908. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_scorers_a.py +0 -0
  909. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_scorers_b.py +0 -0
  910. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_scorers_c.py +0 -0
  911. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/evals/test_scorers_d.py +0 -0
  912. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  913. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  914. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  915. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  916. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  917. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  918. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/foundation/__init__.py +0 -0
  919. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  920. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/foundation/test_model_seam_structured.py +0 -0
  921. {rag_wright-0.9.0/tests/ingestion → rag_wright-0.10.0/tests/harness}/__init__.py +0 -0
  922. {rag_wright-0.9.0/tests/mcp → rag_wright-0.10.0/tests/ingestion}/__init__.py +0 -0
  923. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_aevaluate.py +0 -0
  924. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_builder.py +0 -0
  925. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  926. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  927. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_document_metadata.py +0 -0
  928. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_evaluate.py +0 -0
  929. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  930. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  931. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_sheet_continuations.py +0 -0
  932. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  933. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_table_rows.py +0 -0
  934. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_tuning.py +0 -0
  935. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_unit_grouper.py +0 -0
  936. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ingestion/test_unit_representative.py +0 -0
  937. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/journey/incidents_domain.py +0 -0
  938. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/journey/incidents_pack.ttl +0 -0
  939. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/journey/test_incidents_journey.py +0 -0
  940. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/journey/test_pack_schema.py +0 -0
  941. {rag_wright-0.9.0/tests/models → rag_wright-0.10.0/tests/mcp}/__init__.py +0 -0
  942. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/mcp/test_compliance_server.py +0 -0
  943. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  944. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  945. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/mcp/test_relational_qa_server.py +0 -0
  946. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  947. {rag_wright-0.9.0/tests/ontology → rag_wright-0.10.0/tests/models}/__init__.py +0 -0
  948. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_async_infra.py +0 -0
  949. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  950. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_model_servers.py +0 -0
  951. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_models_dir.py +0 -0
  952. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_no_gemma_default.py +0 -0
  953. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_profile_routing.py +0 -0
  954. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_profile_seam.py +0 -0
  955. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_seam_async.py +0 -0
  956. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
  957. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_seam_event_loops.py +0 -0
  958. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_seam_retry.py +0 -0
  959. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_seam_stream.py +0 -0
  960. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_serving_seam.py +0 -0
  961. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_serving_wiring.py +0 -0
  962. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_tag_structured.py +0 -0
  963. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_tag_structured_async.py +0 -0
  964. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_tracing.py +0 -0
  965. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/models/test_usage.py +0 -0
  966. {rag_wright-0.9.0/tests/skills → rag_wright-0.10.0/tests/ontology}/__init__.py +0 -0
  967. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_clause_template.py +0 -0
  968. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  969. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_derivation.py +0 -0
  970. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  971. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  972. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  973. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  974. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  975. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/reference/test_compliance_reference.py +0 -0
  976. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/reference/test_contract_seam.py +0 -0
  977. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  978. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  979. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  980. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
  981. {rag_wright-0.9.0/tests/store → rag_wright-0.10.0/tests/skills}/__init__.py +0 -0
  982. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
  983. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  984. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_boundary.py +0 -0
  985. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  986. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  987. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_clause_function_classifier.py +0 -0
  988. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  989. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  990. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  991. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_dim_classifier.py +0 -0
  992. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_dim_fleet_live.py +0 -0
  993. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_function_classifier.py +0 -0
  994. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_hybrid_classifier.py +0 -0
  995. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  996. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_legalbert_classifier.py +0 -0
  997. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_model_capabilities.py +0 -0
  998. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_new_function_labels.py +0 -0
  999. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_page_map.py +0 -0
  1000. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_property_extractor.py +0 -0
  1001. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_property_grounding.py +0 -0
  1002. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_reclassify.py +0 -0
  1003. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_residual_decision.py +0 -0
  1004. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_scarce_function_labels.py +0 -0
  1005. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_segment.py +0 -0
  1006. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_segmentation_vocab.py +0 -0
  1007. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_semantic_judge.py +0 -0
  1008. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  1009. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_setfit_probabilities.py +0 -0
  1010. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_span_offsets.py +0 -0
  1011. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_stage_labels_0005.py +0 -0
  1012. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_symbolic_validation.py +0 -0
  1013. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  1014. {rag_wright-0.9.0/tests/subgraphs → rag_wright-0.10.0/tests/store}/__init__.py +0 -0
  1015. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_affiliation_backfill.py +0 -0
  1016. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  1017. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_contract.py +0 -0
  1018. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_property.py +0 -0
  1019. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1020. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_schema.py +0 -0
  1021. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_arcadedb_span.py +0 -0
  1022. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_chunk_text.py +0 -0
  1023. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_concurrent_writes.py +0 -0
  1024. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_contract_kg_store_live.py +0 -0
  1025. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_document_metadata_live.py +0 -0
  1026. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_document_scope.py +0 -0
  1027. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_engine_domain_neutral.py +0 -0
  1028. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_entities_by_name.py +0 -0
  1029. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_kg_edges.py +0 -0
  1030. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_kg_mutations.py +0 -0
  1031. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_kg_read.py +0 -0
  1032. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_kg_write.py +0 -0
  1033. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_neutral_schema.py +0 -0
  1034. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_store_create_flag.py +0 -0
  1035. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/store/test_write_graph_idempotent.py +0 -0
  1036. {rag_wright-0.9.0/tests/util → rag_wright-0.10.0/tests/subgraphs}/__init__.py +0 -0
  1037. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  1038. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1039. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_clause_results.py +0 -0
  1040. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_compliance_check.py +0 -0
  1041. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1042. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  1043. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1044. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1045. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  1046. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1047. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1048. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1049. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_observability.py +0 -0
  1050. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1051. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1052. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1053. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1054. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_scaffold.py +0 -0
  1055. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1056. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1057. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1058. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/test_backfill_clause_span_id.py +0 -0
  1059. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/test_dg_model_ab.py +0 -0
  1060. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/test_populate_clause_kg.py +0 -0
  1061. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/test_populate_entity_graph.py +0 -0
  1062. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/util/test_concurrent.py +0 -0
  1063. {rag_wright-0.9.0 → rag_wright-0.10.0}/tests/util/test_spacy_model.py +0 -0
@@ -39,8 +39,8 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
39
39
  `async def ainvoke(resources, inputs)` (subgraph) / `def <name>(resources, inputs)` (model) in the capability's
40
40
  own module. A subgraph factory builds over the opaque `WorkspaceHandle`, never env: its store access with
41
41
  `pack_store(resources, YourStore)` (your pack's store extension over the workspace's store) and its models with
42
- `resources.model_id(role)`; its query embedder with `workspace_embedder(resources)` (`rag_wright.pack_sdk`, built
43
- from the workspace's embedding profile) and its options with `resources.config`; a model factory is
42
+ `resources.model_id(role)`; its query embedder with `resources.embedder` (or `workspace_embedder(resources)`, its
43
+ `rag_wright.pack_sdk` twin; built from the workspace's embedding profile) and its options with `resources.config`; a model factory is
44
44
  store-independent and ignores `resources`. A builder that takes the store as a keyword goes through `pack_store`
45
45
  too: `pack_store(resources, lambda store: production_x(store=store, ...))`. The handle's underscored attributes
46
46
  are engine-internal; the reference pack's factories show the public form. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
@@ -0,0 +1,607 @@
1
+ ---
2
+ name: building-an-agent-harness
3
+ description: The blueprint for an agent harness over a retrieval engine - the three-tier loop, the eight doors the domain comes through and how to keep it out, tenancy the model cannot reach, human-in-the-loop under replay, what to do when a step does not finish, context and memory management, per-tier reasoning, and where a decision model pays. Load before building or changing a harness, an agent tier, a tool surface, a middleware or a guardrail. Built on DeepAgents/LangGraph; every rule here was paid for by a live run, and the figures were corrected once a real separation measured them.
4
+ ---
5
+
6
+ # Building an agent harness over an engine
7
+
8
+ Repository paths in this skill (`docs/`, `scripts/`, `tests/`, `src/`) are in the engine repository: read them there or on GitHub, at the tag matching your installed engine.
9
+
10
+ > **This skill was distilled from a shipped harness and is written for a DIFFERENT product.** It ships in the
11
+ > engine wheel; link it into your repo's `.claude/skills/` (`docs/installation.md`).
12
+ >
13
+ > **Every rule below was paid for by a live run**, and the measurements are kept because they are why
14
+ > anybody follows the rule. Where a number appears, it was observed, not estimated.
15
+ >
16
+ > **What is generic and what is yours.** The loop, the error levels, the deadlines, the interrupt protocol,
17
+ > context and memory PLUMBING, metering and the decision taxonomy are generic: they are about running an
18
+ > agent, not about your domain. Your tools, your workers, your reports, your prompts, your tenancy shape,
19
+ > your ledger schema, your continuation types, your model choice and your checkpointer are all yours.
20
+ >
21
+ > **That split is more lopsided than it looks, and the next line is the one to believe.** Separating a
22
+ > 7,514-line harness yielded roughly **1,750 lines of genuinely generic substrate and ~1,900 lines of
23
+ > product code that had to move out of the harness package** -- the rest being prompts and tests. (That
24
+ > first figure was 1,300 when the separation was two thirds done; finishing it moved modules INTO the
25
+ > liftable set, which is the direction to expect.) If you
26
+ > are reading this before building, the payoff is real; if you are reading it to estimate, estimate with
27
+ > the script in the next section and not with this sentence.
28
+
29
+ ## FIRST: check whether the engine already SHIPS the substrate
30
+
31
+ **Do not start by building. Start by importing.**
32
+
33
+ ```python
34
+ import importlib
35
+ tier = importlib.import_module("rag_wright.harness") # ModuleNotFoundError -> build; otherwise consume
36
+ print(sorted(tier.__all__))
37
+ ```
38
+
39
+ **From `rag-wright` 0.10.0 the engine ships it** as `rag_wright.harness`, its third public tier (ADR-0139,
40
+ PS-32): the separation was handed over and adopted, and the tier declares `__all__` (reference:
41
+ `docs/api/harness.md`). On an older engine the import raises `ModuleNotFoundError` and everything below applies
42
+ as instructions. On 0.10.0 or later, **consume the tier**: most of this skill becomes background reading, and
43
+ following it as instructions means hand-building several thousand lines the engine ships and maintains. A
44
+ product declares an `AgentDefinition` (its `ToolSurface`, planning split, workers, context type satisfying
45
+ `RunScope`, retry set, model id, `AgentPrompts`, rules and decision points) and runs it through `start_run` /
46
+ `resume_run` / `stream_run`.
47
+
48
+ So check, every time, and pin what you find:
49
+
50
+ - **Record the tier's surface the way you record the engine's API**, in whatever file already holds that
51
+ pin, and fail your suite when reality disagrees with the record **in either direction**. A guard that
52
+ *skips* while the tier is absent is a guard that never runs -- and the absent state passes trivially, so
53
+ drive it into the published state once with a planted module or you have tested nothing.
54
+ - **Require the tier to declare `__all__`.** An undeclared surface makes every import a guess about what
55
+ is public, and under an editable or path dependency an unreleased name is indistinguishable from a
56
+ released one. That mistake has been made twice here.
57
+ - **Build the guard BEFORE you consume the tier.** One written after the first import is shaped to agree
58
+ with whatever you happened to import.
59
+
60
+ **What stays yours either way** is the list in the preamble above, and it does not shrink because the
61
+ substrate arrives pre-built: your tools, workers, prompts, tenancy shape, ledger, continuations, model
62
+ choice and checkpointer. **The sections below on the eight doors, tenancy the model cannot reach, the
63
+ replay rule, and the decision registry apply unchanged to a harness you consume** -- they are about what
64
+ you hand the substrate, not about how the loop is written.
65
+
66
+ **And the second product (build order step 4) survives the tier's arrival with its question inverted.**
67
+ Building, it asks *"did I write this generically?"* Consuming, it asks *"does the engine's tier actually
68
+ satisfy my seams?"* -- which is the cheaper question and the one you can answer in an afternoon, so there
69
+ is no version of this where writing that fake product is wasted.
70
+
71
+ ## The thesis, measured -- and CORRECTED, which is the first lesson
72
+
73
+ **An earlier version of this skill said "32 modules, 7,514 lines, and only THREE import anything from the
74
+ product." That was wrong, and it is worth knowing how wrong before you trust anything else here.** When the
75
+ harness was actually separated, module by module, the figures were:
76
+
77
+ | claimed | measured |
78
+ |---|---|
79
+ | 3 modules import product code | **13** (6 of them a domain package) |
80
+ | 21 name no domain concept | **18** |
81
+ | "turning three imports into protocols, not a refactor" | **~1,900 lines of product code to move** |
82
+
83
+ The claim had been made by counting the *kinds* of door rather than the modules that walk through them, and
84
+ it was repeated into a downstream ADR before anybody re-measured. **If you take one thing from this
85
+ section: a separability claim you have not derived with a script is a guess, and it will be believed.**
86
+
87
+ What actually came out of a 7,514-line harness when it was separated: the tool registry and tool surface
88
+ (1,129 lines), the worker roster with its domain prompts and reports (226), the continuation types and
89
+ their renderer (308), the planning classification, the ledger schema, a vendor and model name, a database
90
+ driver, and a context type encoding the product's tenancy. **Not "mostly prompt text."**
91
+
92
+ What genuinely stayed generic, and did lift: the loop, dispatch, error levels and deadlines, retry
93
+ composition, the interrupt protocol, checkpoint and memory plumbing, tracing, the decision taxonomy, the
94
+ worker-spec builder, the report envelope. That half is real and worth the work. Finished, it was **13
95
+ modules and about 1,750 lines** of the 7,500 -- measured on the three axes intersected, which is the only
96
+ figure worth quoting because each axis alone credits modules the others fail.
97
+
98
+ ## The import guard is NECESSARY and NOT SUFFICIENT -- three axes, and a second product
99
+
100
+ **This is the section the rest of the skill was missing, and its absence cost a full separation's worth of
101
+ rework.** "No harness module imports the retrieval primitives" is a good rule and a cheap test. It is also
102
+ blind to most of what actually ties a harness to one product:
103
+
104
+ | axis | question | what it caught |
105
+ |---|---|---|
106
+ | 1. imports | does a module import product code? | the obvious half |
107
+ | 2. vocabulary | does its CODE name a domain concept? | prompts and reports, with comments and docstrings stripped |
108
+ | 3. **deployment, vendor, tenancy** | does it carry a choice only THIS product made? | everything the first two missed |
109
+
110
+ Axis 3 is the one nobody writes. In a harness that passed axes 1 and 2 cleanly it found: a module
111
+ hardcoding `"openai:qwen/..."` and an `is_openrouter()` helper; a module importing `psycopg` and converting
112
+ a connection URL; four modules keying memory and ledgers on a `(customer, workspace)` pair; and -- the
113
+ sharpest -- **the context type every agent is built with, declaring `customer_id` and `workspace_id` as
114
+ fields.** A product with one tenancy level, or three, could not fill it.
115
+
116
+ **And axis 3's own first implementation was blind to that last one**, because it matched call shapes
117
+ (`f(customer_id=..., workspace_id=...)`) and not field declarations (`customer_id: UUID`). The most central
118
+ instance of the thing it checked for scored zero. **Match declarations too.**
119
+
120
+ ### None of the three measures the thing you actually want
121
+
122
+ All three ask *"is the substrate coupled to this product?"* -- a necessary condition. None can ask *"is what
123
+ the substrate asks for usable by someone who is NOT this product?"* Those come apart, and the gap is where
124
+ a bad seam hides: handing the substrate three pre-computed sets scores perfectly on every axis while
125
+ letting the next product supply three that disagree with each other.
126
+
127
+ **So write a second product. On day one, before the seams exist.**
128
+
129
+ A ~200-line fake product in a domain with nothing in common with yours -- ours was fabric composition
130
+ against a legal-contract harness -- implementing each seam as it stands. Hermetic: no model, no store, no
131
+ credentials. Mark what it cannot do yet as `xfail(strict=True)` so a gap that closes without its exemption
132
+ being removed fails.
133
+
134
+ It is the cheapest high-value test in the whole harness. In one separation it caught, each time before the
135
+ code shipped:
136
+
137
+ - a seam design that would have let a second product state a tier split inconsistent with its own
138
+ classification -- it scored perfectly on all three axes;
139
+ - the context type encoding the first product's tenancy;
140
+ - a surface contract gaining a parameter (`build(..., only=)`) that an outside implementer could not have
141
+ known about;
142
+ - a required member added to a definition object, which every product must now supply.
143
+
144
+ **The rule it encodes: when a seam changes, change the fake product FIRST.** If that is awkward, the seam is
145
+ wrong.
146
+
147
+ ## The doors the domain comes through -- there are EIGHT, not three
148
+
149
+ **An earlier version of this section said three.** When the harness was separated, these are what actually
150
+ had to become seams or move. Build them as doors from the start and the separation is bookkeeping; discover
151
+ them later and each one is a refactor with its own test fallout:
152
+
153
+ | door | shape that worked |
154
+ |---|---|
155
+ | the tool surface | one object: `build(context, resources, only=None)` + `exposed_names` |
156
+ | the worker roster | a tuple of factories, passed in |
157
+ | which operations need PLANNING | declared by the product; the substrate DERIVES the direct surface from it |
158
+ | the context type | a `runtime_checkable` protocol whose member is `scope: tuple[str, ...]` |
159
+ | accounting | an object with `collecting()`, `record(...)`, `trace_metadata` |
160
+ | the checkpointer | built by the product, accepted by the substrate |
161
+ | resuming a suspended run | the continuation renders ITSELF; the substrate asks |
162
+ | the agent's chat model | from the engine's model profile, never a string in the substrate |
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**.
167
+
168
+ That last clause is the whole trick. The alternative -- let the product pass the derived sets too -- is a
169
+ smaller diff and scores perfectly on every axis, and it exports an invariant as a convention the next
170
+ product can break silently. **If a value follows from two others, derive it on the substrate side.**
171
+
172
+ ### Three doors are still worth building first
173
+
174
+ Build these three and most of the rest follows:
175
+
176
+ 1. **The tool surface, DERIVED from your operation set.** Never hand-list it. A hand-written manifest
177
+ silently omits the operation somebody added last week, and nothing fails: the capability exists, is
178
+ routed, is tested, is reachable by API, and the agent simply cannot see it. Derive it, and assert exact
179
+ equality against the operation registry.
180
+ 2. **A tenant-bound facade over the primitives.** One object, built per run from the run's own context,
181
+ exposing moves the agent can recombine. The harness imports the facade and nothing below it. Two guards:
182
+ no method of the facade takes a tenancy key or a document scope, and every primitive that accepts a scope
183
+ is reachable *only* through the facade.
184
+ 3. **The prompts.** One per tier, plus the workers' skills.
185
+
186
+ **The facade is not a tool, deliberately.** If the manifest is derived from the operation set in exact
187
+ equality, a facade move exposed as a tool would be a tool with no operation behind it and the ratchet would
188
+ rightly refuse it. The facade is for composition - what the orchestrator runs in code and what a worker
189
+ recombines - not for prompt-directed calling. Both properties hold because they are about different surfaces.
190
+
191
+ > **Caveat, and it is an honest one: in the harness this came from, the facade was never wired.** It was
192
+ > built, specified against two requirements, covered by eight tests -- and across the whole project nothing
193
+ > ever called it. Its bridge function had no production caller at all; the tests were the only exerciser,
194
+ > which is why that went unnoticed for months.
195
+ >
196
+ > **So build the facade when a tier actually needs to recombine moves in code, not because this skill lists
197
+ > it.** And if you build it early, put one assertion somewhere that a production path reaches it: a
198
+ > green test suite over an unwired component looks exactly like a working feature.
199
+
200
+ ## Tenancy the model cannot reach
201
+
202
+ **The tenant never appears in a tool signature.** Pass it through the framework's injected runtime, which is
203
+ excluded from the schema sent to the model:
204
+
205
+ ```
206
+ search(question, runtime: ToolRuntime) model sees -> ['question']
207
+ search(question, workspace_id: str) model sees -> ['question', 'workspace_id'] <- the leak
208
+ ```
209
+
210
+ That is not stylistic. **In a product like this the documents are adversarial by origin** - somebody outside
211
+ your company wrote them - so an identifier the model can name is one an injected instruction inside an
212
+ uploaded document can name too. The same rule covers the system prompt and any event you stream to a client:
213
+ a workspace id in a prompt is a workspace id a document can quote back.
214
+
215
+ **Ids, not rows.** The context is serialized into the graph on every invocation. A run has no business
216
+ carrying a customer's billing status or a user's password hash past the model.
217
+
218
+ ### Memory: four scopes, and the factory must REFUSE rather than fall back
219
+
220
+ | path | namespace | writable |
221
+ |---|---|---|
222
+ | per-workspace | `(customer, workspace, "memories")` | by the run |
223
+ | per-customer | `(customer, "memories")` | yes: facts true of the customer |
224
+ | product-authored | shipped with the product | **no** |
225
+ | anything else | ephemeral, for the life of the run | n/a |
226
+
227
+ **Read your library's fallback before trusting it.** The one here, given no namespace factory, falls back to
228
+ a legacy path returning either an agent-scoped namespace or **a single global one**. Both are catastrophic
229
+ and neither raises: one global namespace is every customer's memory merged silently, and an agent-scoped one
230
+ is shared across every user of the agent by construction - the shape library docs warn about, *"if one user
231
+ can write to memory that another user reads, a malicious user could inject instructions into shared state."*
232
+
233
+ **So forgetting the factory is not a crash; it is a cross-tenant merge that looks like everything working.**
234
+ Make the factory read the run context and raise when there is none.
235
+
236
+ **Authored knowledge and learned memory live in separate namespaces.** A skill is a file you wrote and
237
+ reviewed. Memory is what an agent noticed. Promoting one customer's observation into another's run is the
238
+ failure that separation exists to prevent, and it is a mechanism, not a tidiness preference.
239
+
240
+ ## One entry point, because context is PER-INVOCATION
241
+
242
+ Runtime context is per-invocation, not per-thread: **a resume that omits it wakes every tool with a null
243
+ context.** Combine that with the memory fallback above and a forgetful resume reads and writes another
244
+ tenant's memory, silently, at the moment a human approved an action.
245
+
246
+ A rule saying "always pass the context" is obeyed until the first refactor. **Make the call site incapable of
247
+ omitting it:** one or two functions that take the authenticated principal, build the context themselves, and
248
+ expose no parameter through which a caller could supply a different one. Then guard it - nothing else may
249
+ invoke an agent, and nothing outside the package may build one.
250
+
251
+ ## Tiers: three, and the direct surface is a requirement
252
+
253
+ ```
254
+ user <-> CHAT-MANAGER conversation, threads, UI context, direct tools for unambiguous asks
255
+ |
256
+ +-- ORCHESTRATOR planning, decomposition, fan-out, re-planning
257
+ |
258
+ +-- WORKERS one skill, few tools each
259
+ ```
260
+
261
+ **The chat-manager's direct tools are not an optimisation.** Three tiers means three agents making model
262
+ calls before any tool runs, and routing *"list my documents"* through all three is latency and cost on the
263
+ commonest path. A model must never sit in the path of an unambiguous request.
264
+
265
+ **The split is a SUBSET, never a partition.** The orchestrator holds everything; the chat-manager holds the
266
+ half that needs no planning. *An operation the orchestrator cannot see is a plan it cannot make.*
267
+
268
+ **And the split is a judgement, so write it down rather than dressing it up as a derivation.** The tempting
269
+ rule - "an operation that names a model or a retrieval graph is a planning operation" - separates the set
270
+ correctly today and is a **proxy**: it misclassifies an operation that takes a judge under another name, and
271
+ one that traverses the graph through injected callables while belonging on the direct path. Write the split
272
+ down, ratchet that every exposed operation lands in exactly one half, and keep the proxy as a cross-check.
273
+
274
+ **Name the limitation out loud: the routing decision is itself a model call and there is no structural way to
275
+ make it.** One model call then a direct tool is what you want; whether the model takes the direct path is
276
+ measured, not asserted.
277
+
278
+ ## Take the tool away. Do not ask the model not to use it.
279
+
280
+ **This is the single most repeated lesson in this harness**, and it has four faces:
281
+
282
+ - **A prompt saying "do not ask" is a suggestion; a tool the worker was never given is a fact.** Workers do
283
+ not hold the escalation tool at all, so escalating is structurally the orchestrator's decision.
284
+ - **Remove the parameter rather than warn about it.** One warning repeated in four places was obeyed zero
285
+ times in four runs; taking the parameter away fixed what a fifth instruction would not.
286
+ - **A bound is a count, not a request.** A tier that re-delegates the same work reads back *"complete,
287
+ nothing further needed"* and delegates again: measured **3 times with reasoning on, 24 times with it off**.
288
+ The right answer is 1, occasionally 2. Both numbers are the model's judgement, so choosing between
289
+ reasoning settings only picks which failure you prefer. A dispatch past the bound never runs - no model
290
+ call, no subagent, no second copy of a reply the tier already has. Twenty-three of those twenty-four were
291
+ pure waste.
292
+ - **Withholding is a MIDDLEWARE concern, not a model-profile one.** A provider profile keys on the *model*,
293
+ and every tier runs the same model - so excluding a tool there strips it from the tier that needs it. A
294
+ middleware is attached to a tier, which is the only seam that can say "this agent cannot do X".
295
+
296
+ Two further details that look optional and are not. **Hide the schema AND refuse the call**: filtering this
297
+ turn's tool list does not cover a call arriving from replayed history or a resumed run. And **a refusal is a
298
+ signpost, not a wall**: a bare "not found" invited seven more wrong guesses in one run; hand the tier back
299
+ what the earlier attempt returned and tell it to answer from that. Return a tool message, never an
300
+ exception - an exception reaches the error middleware, finds nothing in the taxonomy, and kills a run that
301
+ had merely taken a wrong turn.
302
+
303
+ ## When a step does not finish: a bound says STOP, a policy says WHAT INSTEAD
304
+
305
+ Four observed failures, and the sequence of getting them wrong is the lesson:
306
+
307
+ | observed | what bounded it | what is left afterwards |
308
+ |---|---|---|
309
+ | a worker re-dispatched after it had answered and stated its coverage: 2 dispatches, 325.9s | nothing; the run was working | **not a completion failure at all** - a wrong DECISION |
310
+ | the whole-turn deadline killed a run that had already produced correct results | our own clock | **the finished work is in the checkpoint** |
311
+ | the caller's ceiling fired at 555s of a 900s budget | the CALLER's clock | **the finished work is in the checkpoint** |
312
+ | the grading deadline burned re-asking a model that had just timed out | retries exhausted | **nothing at all** |
313
+
314
+ **First conclusion: "these are all one bug" was wrong.** Grouping a decision failure with three completion
315
+ failures made one policy look sufficient for all four. Drive each one with a fault injector and inspect the
316
+ aftermath separately.
317
+
318
+ **Second conclusion, and it saves you a component: the finished work is UNREAD, not LOST.** Two of the four
319
+ leave the worker's correct answer verbatim in the checkpoint as a tool message. So "proceed with what
320
+ returned, report the gap" is a **read-and-report over state you already persist**, not a progress store that
321
+ needs designing.
322
+
323
+ **Third: the row that leaves nothing needs its own answer.** A policy that assumed partial progress would
324
+ render an empty result as a partial answer, which is worse than failing. "Nothing came back" must be
325
+ reportable as exactly that.
326
+
327
+ **Error levels, by who fixes it.** Transient failures retry; tool failures reach the model as a message it
328
+ can act on; missing information interrupts for a human; anything unexpected reaches a developer. Runaway
329
+ loops are capped - and cap model calls and tool calls per run, ending with what you have rather than raising,
330
+ so a partial answer still reaches the user.
331
+
332
+ **Composition order is load-bearing.** Retry middleware goes INNER, configured so exceptions reach the
333
+ error middleware. The other way round, a tool failure is converted to a message before the retry ever sees
334
+ it, and the transient level quietly never fires. Read your library's own note on ordering; it is usually
335
+ documented and usually ignored.
336
+
337
+ **Which failures are recoverable is product knowledge.** Keep the taxonomy in the product and the wrapping in
338
+ the harness.
339
+
340
+ ## Human in the loop: the replay rule governs everything
341
+
342
+ **Interrupting suspends the run, and resuming REPLAYS THE NODE FROM THE START.** Pin it in a test: a node
343
+ that prints before and after its interrupt yields `["before", "before", "after"]`, on a fake tier and a live
344
+ one.
345
+
346
+ So a tool that spends money, writes a row or sends a message before its question does it **once on the way in
347
+ and again on the way back**, silently, because the second pass looks identical to the first.
348
+
349
+ **The rule: gather the arguments, interrupt, act only afterwards.** Take it to its conclusion - make the
350
+ asking tool do nothing but ask, so there is no "afterwards" to get wrong, and read the function body in a
351
+ test to keep it that way.
352
+
353
+ **A question is a tool, not a middleware gate.** Gating a tool the model already chose is right for "may I do
354
+ this?" and wrong for "which of these did you mean?". A clarification is something the model decides it needs,
355
+ so it must be something the model can reach for.
356
+
357
+ **Batch the questions one tier up.** Five workers each asking directly is *correct* and also terrible: five
358
+ interruptions arrive one at a time, each stopping everything, with no sign another is behind it. A worker
359
+ that would ask instead reports "blocked, I need X" through its structured result, and the orchestrator asks
360
+ once. The less obvious benefit is bigger: a need that reaches the orchestrator can often be answered *by* the
361
+ orchestrator, which already knows what the conversation settled on, and never troubles the user at all.
362
+
363
+ **Never bridge the asking tool into a code interpreter.** A question raised from inside a loop re-runs the
364
+ whole program on resume - every tool call it had already made, again, with nothing on screen to say so.
365
+
366
+ **And a changed subject is confirmed deterministically, never adopted silently.** The user runs one query,
367
+ navigates to another, types "what about this one?", and every word of the answer is fluent, cited, and about
368
+ the wrong object. **Asking the model to notice it is asking the failure to detect itself.** Compare the
369
+ incoming view against the one the thread last confirmed, before the model runs, with the last-confirmed value
370
+ in the checkpoint so it survives the process that started the thread.
371
+
372
+ **A continuation payload is a claim, not permission.** *"A sweep over documents A, B and C"* says what the
373
+ user was looking at; it does not authorise reading A, B and C. It arrives from a browser and is then read by
374
+ a model, so it is untrusted twice. Re-ask every identifier of the workspace through the choke point you
375
+ already have, keep what survives, and treat the rest as **absent rather than refused** - a stale bookmark is
376
+ not an error, and raising would put a foreign identifier on the model's path inside a recoverable error.
377
+
378
+ ## Context management, four mechanisms
379
+
380
+ 1. **One per-run record of what was already asked.** Across every recorded run - 194 tool calls - **25 were
381
+ byte-identical repeats**: same tool, same arguments, a second real retrieval for an answer already in the
382
+ transcript. Answer an identical call from the record so the operation never runs and the payload never
383
+ re-enters the context. Three rules: **opt-IN only** (a job's status changes while the run watches it, and
384
+ an asking tool must reach a person every time); key it on the **run**, not the dispatch (a worker
385
+ re-dispatched asks the same question in different words, and a dispatch-scoped record matches nothing);
386
+ and remember that what prevents a wrong answer is the **subject** check, not which brief did the asking.
387
+ 2. **Progressive disclosure for the rare procedure.** What a tier needs on every turn belongs in its prompt
388
+ and must stay decisive at the margin. What it needs occasionally - how to batch a clarification, which
389
+ arises only when a worker comes back blocked - belongs in a skill it sees as a name and one line until it
390
+ applies. **The distinction is frequency, not importance.**
391
+ 3. **Reference over value.** A surviving identifier is re-fetched by the agent, not snapshotted into the
392
+ prompt: fresh, re-scoped on every fetch, and an id rather than a results array.
393
+ 4. **Structural caps, labelled as such.** Size limits on a payload exist so an oversized one is refused
394
+ visibly rather than trimmed silently. How big a summary *should* be is measured, not guessed - say which
395
+ kind of number you have written down.
396
+
397
+ ## Reasoning is a per-TIER decision, and the measurement is stark
398
+
399
+ Same question, same tools, same model, only the reasoning flag differing:
400
+
401
+ | | duration | output tokens | reasoning tokens | tool chosen |
402
+ |---|---|---|---|---|
403
+ | reasoning ON | **34.8s** | 1,812 | **1,905** | the same one |
404
+ | reasoning OFF | **4.3s** | 42 | 0 | the same one |
405
+
406
+ **Identical decision, 8x the wall clock, 43x the output.** With no cap the reasoning is unbounded, so one
407
+ turn can outlive its own attempt deadline - and the retry reasons just as long, so it fails again. That is
408
+ how one evaluation item burned three consecutive attempts and died, and why **68% of a run's wall clock** was
409
+ attempts abandoned before they returned. The cost was invisible until abandoned attempts appeared in the
410
+ trace at all.
411
+
412
+ **Again a middleware, not a profile**, for the same reason as withholding: the profile keys on the model and
413
+ every tier shares it. And **merge the model settings rather than replacing them**: binding replaces the whole
414
+ value, so writing the reasoning flag alone drops the endpoint pin and the usage reporting that came with it.
415
+ Nothing fails. The variance simply comes back wearing the pin's name.
416
+
417
+ **Do not over-claim from one arm.** One question, one sample, one tier justifies turning reasoning off for
418
+ *that* tier. The planning tier's job is decomposition and its decisions are the hardest; leave it thinking
419
+ until you have measured it.
420
+
421
+ ## Durability and metering
422
+
423
+ **Checkpoint into the database you already run, in its own schema.** A suspended run must outlive the
424
+ process that started it, and a deploy is a reload the user did not ask for - so an in-memory saver loses
425
+ every run awaiting a human approval. The real cost is not the driver, it is **schema ownership**: a
426
+ checkpointer that creates unqualified tables where your migration autogenerator is looking will produce a
427
+ `drop_table` for them, and a routine migration deletes every suspended run. Their own schema makes them
428
+ unreflected.
429
+
430
+ **Zero is a measurement; absent is not.** Record a measured zero - an agent that answered from its own
431
+ context still spent planning tokens. Never record an **unmeasured** run as zero: a row of zeros asserts free
432
+ work. **Record wall-clock duration even when cost is unmeasurable**, because a self-hosted deployment bills
433
+ by the second and duration is the one input that makes the run apportionable later - and it cannot be
434
+ backfilled. **A ledger failure never fails the run.**
435
+
436
+ **One session identifier per run**, so usage can be correlated back by it. Without that the reader falls back
437
+ to summing a time window and attributes anything else running at that moment to this caller - unusable the
438
+ moment two people ask a question at once. Gate tracing on real **configuration**, never on a package being
439
+ importable, and make every telemetry touch degrade to a no-op.
440
+
441
+ **The event contract is yours, not the framework's.** Forwarding raw chunks makes your client depend on node
442
+ names, and every middleware change becomes a front-end change. Translate into a small named set of events.
443
+ Put no tenancy in them - a streamed frame is more exposed than a prompt.
444
+
445
+ ## Decisions: enumerate them, and say what decides each one TODAY
446
+
447
+ **A wrong decision is a stop-the-line event, and rarity is not a defence.** A decision that is wrong once in
448
+ fifty runs is a decision you do not control, and it will be wrong in front of a customer on the run that
449
+ matters. Routing, classification, dispatch, escalation and guardrail verdicts are all decisions.
450
+
451
+ So keep a registry of decision points, and give each one **four distinguishable states**, because collapsing
452
+ them is how gaps get miscounted in both directions:
453
+
454
+ | state | meaning |
455
+ |---|---|
456
+ | recorded | something decides it and we can see what it chose |
457
+ | **a real recording gap** | something decides it and nothing records it |
458
+ | left out on purpose | recording it here would duplicate a fact owned elsewhere - say so, with the reason |
459
+ | **no decider yet** | nothing makes this decision at all; name what would have to exist first |
460
+
461
+ **The last state is the one worth the effort.** An observer for a decision nobody takes records the model's
462
+ implicit guess as though a guardrail had ruled on it. In this harness the content-safety point was attributed
463
+ to "a guardrail" that measurably did not exist: every mention of injection was prose in a system prompt, the
464
+ only typed exception was a boundary backstop whose own docstring said it should be unreachable, and the
465
+ behaviour was exercised only by a test outside the harness. **Build the decider first; the observation is
466
+ then trivial.**
467
+
468
+ **Say plainly what decides each point today, and resist the flattering answer.** In this harness, after a
469
+ full phase of work: no decision model anywhere in the loop, so most points are plain model turns where *a
470
+ 51% call and a 99% call are indistinguishable in the output*. Exactly one point returned a real confidence,
471
+ because a tool decided it. That asymmetry is the argument for a decision model, and it only becomes visible
472
+ if the registry is honest.
473
+
474
+ **Where a decision model pays, and where it must never go.** Points that are a model's implicit judgement
475
+ with a small fixed option space - delegate or answer, which workers, accept or re-dispatch, escalate or
476
+ proceed - are candidates, and the registry doubles as the labelled corpus for training one, provided the
477
+ decisions are recorded. **A point already decided by a typed allow-list stays deterministic: replacing a
478
+ deterministic check with a probabilistic one is a regression however fast it is.** Shadow-mode first, always.
479
+
480
+ **Derive a decision from what the tier DID, never from what the model announces.** A model asked to report
481
+ its own decision reports an intention.
482
+
483
+ ## Grading your own runs
484
+
485
+ **Keep each rule as ONE object holding both the sentence the model reads and the question the grader is
486
+ asked.** They are deliberately different sentences for different readers - the model is told what to do, the
487
+ grader is asked what happened - and keeping them on one object is what stops them drifting into two copies of
488
+ one decision. Record on the same object where the instruction is actually delivered, because it is not always
489
+ a prompt: one rule here is delivered as a signpost returned on the wrong call, and a registry assuming
490
+ "instruction equals prompt line" would have misrepresented that.
491
+
492
+ **The detectors are the grader's TOOLS.** A grader asked *"was the worker dispatched once per question?"* can
493
+ be wrong; one handed a function that counts cannot. Of six rules here, **five have a deterministic detector**
494
+ and the sixth - whether a dispatch restated the user's request faithfully - is the only genuine judgement.
495
+ Keep detector-less rules rare, and know which they are.
496
+
497
+ **Write your own grading middleware rather than subclassing a framework's.** Ours used about a quarter of the
498
+ library's and fought the rest: the rubric lived on a shared graph key that two parallel workers cannot both
499
+ write (a hard concurrent-update error that presented as a **hang** and cost three live runs to name), the
500
+ grader was built with a bare factory so none of our middleware reached it - no retry policy, no deadline, no
501
+ one-answer-per-turn, which is how one grader emitted **307 identical detector calls in a single response** -
502
+ and a quarter of its body was revision machinery we deliberately did not use.
503
+
504
+ **Grade on a bounded clock, and a failed grade abandons the GRADE, never the run.** Give the grading pass its
505
+ own wall clock *and* a per-attempt clock inside the retry: without the inner one a slow call is
506
+ unabandonable, eats the whole budget, and reports as "passed its deadline".
507
+
508
+ **Your transcripts are adversarial by origin**, because they quote documents somebody else wrote. Fence the
509
+ rules, the transcript and the verdict with a per-pass nonce and escape the closer: a rubric a document can
510
+ impersonate is worse than no rubric.
511
+
512
+ ## Framework contract drift is silent, and behaviour is the only detector
513
+
514
+ Four observed, each with a green structural suite at the time:
515
+
516
+ - **structured output became an optional tool the model may decline.** A minor version change wrapped it in a
517
+ strategy with no forcing; all three graders ended normally with no structured response, and the run scored
518
+ zero on an answer that was correct. **Asking for a nonce-fenced block and parsing it yourself removes the
519
+ failure by construction** - a model always emits text, there is no optional tool left to decline - and it
520
+ drops a model call. Interpolate the shape into the prompt *from the same constant the parser reads*, so the
521
+ instruction and the parser cannot become two copies of one decision.
522
+ - **a middleware left the base stack** and the planning tier silently lost its task-list tool.
523
+ - **a retry middleware returned its failure as message content**, indistinguishable to a parser from a badly
524
+ formatted answer - which is how a measured "81% parse rate" was entirely an artefact, and how a grader
525
+ re-asked a model that had just timed out. Configure retries to raise, and count "never answered"
526
+ separately from "wrong shape".
527
+ - **every generation emitted had a duration of zero** for the project's whole life.
528
+
529
+ **So: pin the behaviour you depend on with a test that DRIVES it**, not one that asserts a symbol imports.
530
+ Importing fine was never the question. And where a framework decision can change under you, prefer a format
531
+ you own.
532
+
533
+ ## Instruments lie, and they lie confidently
534
+
535
+ Four wrong calls in one phase, each stated with confidence: a stall blamed on the provider from a static
536
+ heartbeat; workers said to hold a shell by reading a compiled tool node; a parse rate that was entirely the
537
+ retry artefact above; and a time split attributed to the engine that was 767.7s ours against 318s theirs.
538
+
539
+ **A guard or a number that has not been made to fail is not evidence.** Plant the violation, watch it fire,
540
+ restore. And when you report a cause, label it: mechanism observed, consistent-with, or timing-only.
541
+
542
+ ## Build order
543
+
544
+ 0. **Check whether the engine ships the substrate** (the first section above). If it does, steps 1-5 become
545
+ *pin its surface, then verify it against your second product*, and you resume at step 6.
546
+ 1. **The context object and the single entry point**, with the guard that nothing else may invoke an agent.
547
+ **Give the context an opaque `scope: tuple[str, ...]` from the start**, not named tenancy ids -- it is
548
+ the hardest thing to change later, because every agent is built with it.
549
+ 2. **The import guard**: no harness module may import the retrieval primitives.
550
+ 3. **The three-axis measurement as a committed SCRIPT**, not a one-off. Axis 3 (deployment, vendor,
551
+ tenancy) is the one that finds what the others cannot, and declarations must match as well as calls.
552
+ 4. **The second product**, ~200 lines, hermetic, strict xfails. Before the seams exist, so each seam is
553
+ designed against an outside implementer rather than audited afterwards. **This is the step that was
554
+ missing**, and the one that would have saved the most.
555
+ 5. **The facade**, with its two guards -- when a tier needs it (see the caveat above).
556
+ 6. **The derived tool surface**, with exact-equality against the operation registry.
557
+ 7. **One tier, end to end**, holding the read surface directly. Three tiers before anything has run is a
558
+ hierarchy designed against a prediction.
559
+ 8. **Error levels and the caps**, in the documented composition order.
560
+ 9. **Tracing and metering**, before you tune anything - the reasoning cost above was invisible until
561
+ abandoned attempts appeared in the trace.
562
+ 10. **The durable checkpointer**, in its own schema.
563
+ 11. **The interrupt protocol**, with the replay test pinned first.
564
+ 12. **The remaining tiers**, the roster, and the withholding middleware.
565
+ 13. **The decision registry and the rule registry**, then grading.
566
+ 14. **Then**, and only with runs recorded, consider a decision model on a point that has one.
567
+
568
+ ## What goes in your project's own child skill
569
+
570
+ - your tier roster and which operations each tier holds, by name
571
+ - your prompts' locked rules, and where each is actually delivered
572
+ - the commands: how to run one agent locally, how to replay a recorded run, how to drive a fault
573
+ - your decision registry's current four-way split, and which gaps are open
574
+ - the defects that recurred in **your** harness, with the run that showed each one
575
+
576
+ ## Verification checklist
577
+
578
+ **Written for BUILDING the substrate. If you are consuming the engine's tier (the first section), about a
579
+ third of these stop being yours** -- the import rule, the three-axis measurement, the vendor/driver/tenancy
580
+ rule, the derive-on-the-substrate-side rule, the entry point's context, the middleware order and the
581
+ namespace factory's refusal are all properties of code you no longer own. **Verify them rather than
582
+ building them, and treat a failure as a finding to raise, not a task.** Everything about your tools, your
583
+ prompts, your tenancy shape, your interrupts, your decisions and your grading stays yours in both worlds,
584
+ as does the last line.
585
+
586
+ - [ ] No harness module imports the retrieval primitives (tested)
587
+ - [ ] The three-axis measurement is a committed script, and axis 3 matches FIELD DECLARATIONS as well as
588
+ calls -- a context type declaring `customer_id` is the case that hides
589
+ - [ ] A second product, in an unrelated domain, builds and runs an agent on the substrate (tested,
590
+ hermetic). Its gaps are `xfail(strict=True)` so one that closes without its exemption being removed
591
+ fails
592
+ - [ ] Every value the substrate could DERIVE is derived there, not passed in -- a derived value crossing the
593
+ boundary becomes a convention the next product can break silently
594
+ - [ ] Nothing in the substrate names a vendor, a model, a driver or a tenancy key (tested, axis 3)
595
+ - [ ] When a seam changed, the second product was changed FIRST
596
+ - [ ] The tool manifest is derived from the operation set in exact equality (tested)
597
+ - [ ] No tool signature, prompt or streamed event carries a tenancy identifier (tested)
598
+ - [ ] The memory namespace factory RAISES without a run context; no fallback path is reachable
599
+ - [ ] An agent can only be invoked through the entry point, which cannot omit the context (tested)
600
+ - [ ] The replay behaviour of your interrupt is pinned by a test, fake and live
601
+ - [ ] Every tool that interrupts does nothing before its question
602
+ - [ ] A bound exists for model calls, tool calls and re-dispatch, and each is a count rather than a request
603
+ - [ ] Retry middleware is INNER of the error middleware, and failures raise rather than returning as content
604
+ - [ ] A measured zero is recorded; an unmeasured run is not recorded as zero
605
+ - [ ] Each decision point is in exactly one of the four states, and a test asserts the partition
606
+ - [ ] Each graded rule carries both its instruction and its criterion on one object
607
+ - [ ] Every new guard was proved by planting its violation and watching it fail
@@ -51,7 +51,7 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
51
51
  ## 1. Install
52
52
 
53
53
  ```sh
54
- uv add 'rag-wright>=0.8.0' # released-product mode (PyPI); see below for local co-development
54
+ uv add 'rag-wright>=0.9.0' # released-product mode (PyPI); see below for local co-development
55
55
  ```
56
56
 
57
57
  Stand up the runtime prerequisites you provide: ArcadeDB (the store), a model provider (OpenRouter or self-hosted
@@ -173,9 +173,10 @@ role's model). The profile decides endpoint, key and the agent turn's reasoning
173
173
  vendor or vendor flag; every call, a subagent's included, is recorded into `measure_usage()` with the provider's
174
174
  real cost and traced when tracing is on. The generic harness substrate (the loop, error levels and deadlines,
175
175
  retries, interrupts and human-in-the-loop, replay on resume, memory practice, metering) is engine scope (engine
176
- ADR-0139, PS-32): it arrives as a third public tier with the `building-an-agent-harness` skill. Until your installed
177
- engine has it, keep agents thin and never write a substrate of your own; your product keeps its agents, tools,
178
- prompts, skills, guardrails and decision models.
176
+ ADR-0139, PS-32): the third public tier `rag_wright.harness` (engine 0.10.0 and later; reference
177
+ `docs/api/harness.md`, practice in the `building-an-agent-harness` skill). Declare an `AgentDefinition` and run it
178
+ with `start_run` / `resume_run`; never write a substrate of your own (on an older engine, keep agents thin). Your
179
+ product keeps its agents, tools, prompts, skills, guardrails and decision models.
179
180
 
180
181
  **Using a self-hosted model (Qwen on Modal).** Deploy it from the engine and use its model id like any model:
181
182
  `server = await adeploy_model_server(ModelServerSpec(name="<app>", max_num_seqs=<concurrency target>))` (the locked
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.10.0"
3
+ }