rag-wright 0.17.0__tar.gz → 0.17.1__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 (1111) hide show
  1. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +8 -3
  2. rag_wright-0.17.1/.release-please-manifest.json +3 -0
  3. {rag_wright-0.17.0 → rag_wright-0.17.1}/CHANGELOG.md +7 -0
  4. {rag_wright-0.17.0 → rag_wright-0.17.1}/CLAUDE.md +7 -1
  5. {rag_wright-0.17.0 → rag_wright-0.17.1}/PKG-INFO +1 -1
  6. rag_wright-0.17.1/docs/adr/0142-the-default-writer-keeps-one-edge-per-type-and-endpoints.md +32 -0
  7. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/README.md +2 -1
  8. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/README.md +2 -2
  9. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/pack_sdk.md +1 -1
  10. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/_engine-gaps.md +10 -7
  11. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/kg-construction.md +5 -4
  12. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/plan.md +1 -0
  13. {rag_wright-0.17.0 → rag_wright-0.17.1}/pyproject.toml +1 -1
  14. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +8 -3
  15. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/kg.py +4 -3
  16. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/builder.py +5 -4
  17. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/arcadedb.py +18 -4
  18. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/seam.py +5 -2
  19. {rag_wright-0.17.0 → rag_wright-0.17.1}/tasks.md +3 -1
  20. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_kg.py +1 -1
  21. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_builder.py +1 -1
  22. rag_wright-0.17.1/tests/ingestion/test_default_writer_ensures_edges.py +33 -0
  23. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_graph_parity.py +1 -1
  24. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_write_count.py +1 -1
  25. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_schema.py +1 -1
  26. rag_wright-0.17.1/tests/store/test_kg_write_ensure_edges.py +142 -0
  27. {rag_wright-0.17.0 → rag_wright-0.17.1}/uv.lock +1 -1
  28. rag_wright-0.17.0/.release-please-manifest.json +0 -3
  29. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/settings.json +0 -0
  30. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
  31. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
  32. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
  33. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
  34. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
  35. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
  36. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
  37. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  38. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/creating-evals/SKILL.md +0 -0
  39. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/laya/SKILL.md +0 -0
  40. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  41. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  42. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  43. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/setfit/SKILL.md +0 -0
  44. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
  45. {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
  46. {rag_wright-0.17.0 → rag_wright-0.17.1}/.env.example +0 -0
  47. {rag_wright-0.17.0 → rag_wright-0.17.1}/.github/workflows/publish.yml +0 -0
  48. {rag_wright-0.17.0 → rag_wright-0.17.1}/.github/workflows/release-please.yml +0 -0
  49. {rag_wright-0.17.0 → rag_wright-0.17.1}/.gitignore +0 -0
  50. {rag_wright-0.17.0 → rag_wright-0.17.1}/LICENSE +0 -0
  51. {rag_wright-0.17.0 → rag_wright-0.17.1}/README.md +0 -0
  52. {rag_wright-0.17.0 → rag_wright-0.17.1}/SPEC.md +0 -0
  53. {rag_wright-0.17.0 → rag_wright-0.17.1}/conftest.py +0 -0
  54. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  55. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/ArcadeDB_Local.md +0 -0
  56. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/OBSERVABILITY.md +0 -0
  57. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
  58. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  59. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  60. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0004-entity-disambiguation.md +0 -0
  61. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0005-relational-golden-set.md +0 -0
  62. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0006-model-profile.md +0 -0
  63. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  64. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  65. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  66. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  67. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  68. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  69. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  70. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  71. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  72. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  73. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  74. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  75. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  76. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  77. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  78. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  79. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  80. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  81. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  82. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  83. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  84. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  85. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  86. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  87. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  88. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  89. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  90. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  91. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  92. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  93. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  94. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  95. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  96. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  97. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  98. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  99. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  100. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  101. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  102. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  103. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  104. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  105. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  106. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  107. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  108. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  109. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  110. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  111. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
  112. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  113. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0057-async-engine-architecture.md +0 -0
  114. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0058-structure-first-chunking.md +0 -0
  115. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  116. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  117. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  118. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  119. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  120. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  121. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  122. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  123. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  124. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  125. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  126. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  127. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  128. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  129. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  130. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  131. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  132. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  133. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  134. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  135. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  136. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  137. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  138. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  139. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  140. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  141. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  142. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
  143. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  144. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  145. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  146. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  147. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
  148. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
  149. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
  150. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0094-workspace-document-scope.md +0 -0
  151. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0095-span-page-provenance.md +0 -0
  152. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  153. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  154. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  155. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  156. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
  157. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  158. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  159. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  160. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  161. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  162. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  163. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
  164. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  165. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  166. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  167. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  168. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  169. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  170. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  171. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  172. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  173. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  174. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  175. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  176. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  177. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  178. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  179. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  180. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  181. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  182. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  183. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
  184. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  185. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  186. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  187. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  188. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  189. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  190. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  191. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  192. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  193. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  194. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  195. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
  196. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0140-one-model-family-on-metal.md +0 -0
  197. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0141-the-hard-split-cuts-between-lines-and-repeats-a-tables-header.md +0 -0
  198. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/harness.md +0 -0
  199. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  200. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/architecture.md +0 -0
  201. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/README.md +0 -0
  202. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
  203. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  204. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  205. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  206. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  207. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  208. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  209. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  210. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  211. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  212. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  213. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  214. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  215. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  216. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  217. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  218. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  219. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  220. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  221. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  222. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  223. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  224. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  225. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  226. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  227. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  228. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  229. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  230. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  231. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  232. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  233. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  234. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  235. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  236. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  237. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  238. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  239. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  240. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  241. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  242. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  243. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  244. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  245. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  246. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  247. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  248. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  249. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  250. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  251. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  252. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  253. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  254. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  255. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  256. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  257. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  258. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  259. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  260. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  261. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  262. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  263. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/misc/.gitkeep +0 -0
  264. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  265. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/async-migration.md +0 -0
  266. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/demo_plan.md +0 -0
  267. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  268. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  269. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  270. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  271. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  272. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  273. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/concepts.md +0 -0
  274. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/configuration.md +0 -0
  275. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/contract_pipeline_explainer.md +0 -0
  276. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/corpus_ingest_recipe.md +0 -0
  277. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/README.md +0 -0
  278. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
  279. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
  280. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/entity-resolution.md +0 -0
  281. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  282. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
  283. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/classifier_model_ab.md +0 -0
  284. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_demo.md +0 -0
  285. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_gate_cc7.md +0 -0
  286. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_rung2_cc7.md +0 -0
  287. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  288. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/dg_model_ab.md +0 -0
  289. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/function_gate_recall.md +0 -0
  290. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  291. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
  292. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/ocr_benchmark.md +0 -0
  293. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/prod1_readiness.md +0 -0
  294. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/prod2_readiness.md +0 -0
  295. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/query_side_model_ab.md +0 -0
  296. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  297. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_provider_routing.md +0 -0
  298. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  299. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/evals.md +0 -0
  300. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/harness.md +0 -0
  301. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/installation.md +0 -0
  302. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/playbook.md +0 -0
  303. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/capability_profiles.md +0 -0
  304. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/contracts_product_roadmap.md +0 -0
  305. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/engine-api-migration-handoff.md +0 -0
  306. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/engine_async_api.md +0 -0
  307. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/new-domain-build-sequence.md +0 -0
  308. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/seam-adaptation-guide.md +0 -0
  309. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  310. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  311. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/new-domain-developer-journey.md +0 -0
  312. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/ontology-induction.md +0 -0
  313. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/quickstart.md +0 -0
  314. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/reference-pack.md +0 -0
  315. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/releasing.md +0 -0
  316. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-platform/SPEC.md +0 -0
  317. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-platform/TASKS.md +0 -0
  318. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-prep/plan.md +0 -0
  319. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/evals/plan.md +0 -0
  320. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  321. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  322. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/plan.md +0 -0
  323. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  324. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/langgraph-ingestion/plan.md +0 -0
  325. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
  326. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
  327. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
  328. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
  329. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
  330. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
  331. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  332. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  333. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  334. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  335. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  336. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  337. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
  338. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  339. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/CLAUDE.md.template +0 -0
  340. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/README.md +0 -0
  341. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/dependabot.yml +0 -0
  342. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/playbook.md.template +0 -0
  343. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  344. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  345. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  346. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  347. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  348. {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/workspaces.md +0 -0
  349. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/__init__.py +0 -0
  350. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/acord.py +0 -0
  351. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/acord_retrieval.py +0 -0
  352. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/boundary_residue_gold.py +0 -0
  353. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/build_golden.py +0 -0
  354. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  355. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  356. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  357. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  358. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/condensed_pipeline.py +0 -0
  359. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/contract_parity_live.py +0 -0
  360. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/contractnli_judge.py +0 -0
  361. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/cuad_highlight.py +0 -0
  362. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/embedded_eval.py +0 -0
  363. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/full_pipeline_rerank.py +0 -0
  364. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_ceiling.py +0 -0
  365. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_property_rerank.py +0 -0
  366. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_rerank.py +0 -0
  367. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/gate1_chunker_ab.py +0 -0
  368. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/gate2_hybrid_rerank.py +0 -0
  369. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/golden/relational/set.json +0 -0
  370. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/golden.py +0 -0
  371. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/ground_discriminator_rerank.py +0 -0
  372. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/harness.py +0 -0
  373. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/ingestion_live_smoke.py +0 -0
  374. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/kg_primary.py +0 -0
  375. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/kg_property_rerank.py +0 -0
  376. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/listwise_rerank.py +0 -0
  377. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/multihop.py +0 -0
  378. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/nl_to_type.py +0 -0
  379. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/relational_eval.py +0 -0
  380. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/residual_decision_gold.py +0 -0
  381. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/segmenter_eval.py +0 -0
  382. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/semantic_judge_gold.py +0 -0
  383. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_acord.py +0 -0
  384. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_acord_retrieval.py +0 -0
  385. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_harness.py +0 -0
  386. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_multihop_set.py +0 -0
  387. {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/unit_grouper_eval.py +0 -0
  388. {rag_wright-0.17.0 → rag_wright-0.17.1}/examples/model_server.py +0 -0
  389. {rag_wright-0.17.0 → rag_wright-0.17.1}/examples/quickstart.py +0 -0
  390. {rag_wright-0.17.0 → rag_wright-0.17.1}/plan.md +0 -0
  391. {rag_wright-0.17.0 → rag_wright-0.17.1}/release-please-config.json +0 -0
  392. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ab_model_overlap.py +0 -0
  393. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acord_unify.py +0 -0
  394. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_acord.py +0 -0
  395. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_cuad.py +0 -0
  396. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_ecfr.py +0 -0
  397. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_edgar.py +0 -0
  398. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_ftc_255.py +0 -0
  399. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_prod1_corpus.py +0 -0
  400. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/audit_reclass_flips.py +0 -0
  401. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/author_leg_a_silver_key.py +0 -0
  402. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_affiliations.py +0 -0
  403. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_clause_span_id.py +0 -0
  404. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_edge_source_doc_id.py +0 -0
  405. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backup_kg_to_gcs.sh +0 -0
  406. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/bootstrap_template_capture.py +0 -0
  407. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/bootstrap_typed_edges.py +0 -0
  408. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_api_docs.py +0 -0
  409. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_api_docs.sh +0 -0
  410. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_cuad_clause_cache.py +0 -0
  411. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_function_routing_map.py +0 -0
  412. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_harness_doc.py +0 -0
  413. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_assemble_v2.py +0 -0
  414. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_assemble_v3.py +0 -0
  415. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_hard_negatives.py +0 -0
  416. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_hard_positives.py +0 -0
  417. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_training.py +0 -0
  418. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_hybrid.py +0 -0
  419. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_hybrid2.py +0 -0
  420. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_actor.py +0 -0
  421. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_claimtypes.py +0 -0
  422. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_operative.py +0 -0
  423. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_label_spans.py +0 -0
  424. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_laya_prep.py +0 -0
  425. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_laya_train.py +0 -0
  426. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_prep_operative.py +0 -0
  427. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric.py +0 -0
  428. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric2.py +0 -0
  429. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_train_operative.py +0 -0
  430. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compare_extraction_models.py +0 -0
  431. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_actor_gate_smoke.py +0 -0
  432. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_engine_smoke.py +0 -0
  433. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_policy_demo.py +0 -0
  434. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/curate_taxonomy_gaps.py +0 -0
  435. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/dg_model_ab.py +0 -0
  436. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
  437. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
  438. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_leg_pool.py +0 -0
  439. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_legs.py +0 -0
  440. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_pool.py +0 -0
  441. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_relstructure.py +0 -0
  442. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_retrieval.py +0 -0
  443. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_all.py +0 -0
  444. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_ce.py +0 -0
  445. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_listwise_b.py +0 -0
  446. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/export_ce_dataset.py +0 -0
  447. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/extract_features.py +0 -0
  448. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/listwise_variants.py +0 -0
  449. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/relational_features.py +0 -0
  450. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/train_ce.py +0 -0
  451. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/train_modal.py +0 -0
  452. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/enrich_edgar_candidates.py +0 -0
  453. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_chunking_ab.py +0 -0
  454. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  455. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_compliance_gold.py +0 -0
  456. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/extract_arcadedb_docs.py +0 -0
  457. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/fetch_reference_models.py +0 -0
  458. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/generate_contract_python.py +0 -0
  459. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/git_post_commit_graphify.sh +0 -0
  460. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/granite_chunker_assess.py +0 -0
  461. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/graph_status.sh +0 -0
  462. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_acord.py +0 -0
  463. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_async_prod2.py +0 -0
  464. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_document_prod2.py +0 -0
  465. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_prod2.py +0 -0
  466. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_cuad.py +0 -0
  467. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_cuad_full.py +0 -0
  468. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_ftc_compliance.py +0 -0
  469. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_prod1.py +0 -0
  470. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_prod1_async.py +0 -0
  471. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_smoke.py +0 -0
  472. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/install_git_hooks.sh +0 -0
  473. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/label_new_functions.py +0 -0
  474. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/legb_function_gate_recall.py +0 -0
  475. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/make_compliance_fixtures.py +0 -0
  476. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/make_compliance_gold.py +0 -0
  477. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_compliance_agent_demo.py +0 -0
  478. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  479. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
  480. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_generation_robustness.py +0 -0
  481. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_harness_genericity.py +0 -0
  482. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_silver.py +0 -0
  483. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/merge_docs_into_framework.py +0 -0
  484. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  485. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
  486. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  487. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_span_fields.py +0 -0
  488. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mine_scarce_functions.py +0 -0
  489. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_arcadedb.py +0 -0
  490. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_backfill.py +0 -0
  491. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_exception_linking.py +0 -0
  492. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm.py +0 -0
  493. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  494. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_server.py +0 -0
  495. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_throughput.py +0 -0
  496. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_vllm_server.py +0 -0
  497. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_query_app.py +0 -0
  498. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_bench.py +0 -0
  499. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  500. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_vllm_server.py +0 -0
  501. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_stack_a100.py +0 -0
  502. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ocr_benchmark.py +0 -0
  503. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ocr_preprocess.py +0 -0
  504. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ontology_dimension_check.py +0 -0
  505. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/phase_a_leg_validate.py +0 -0
  506. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_clause_kg.py +0 -0
  507. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_entity_graph.py +0 -0
  508. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_entity_graph_extracted.py +0 -0
  509. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_property_store.py +0 -0
  510. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/prep_relational_verification.py +0 -0
  511. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/publish_manifests.py +0 -0
  512. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/reclassify_kg.py +0 -0
  513. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/refresh_framework_graph.sh +0 -0
  514. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/revert_reclass_flips.py +0 -0
  515. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/run_acord_retrieval.py +0 -0
  516. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/run_clause_exception_linking.py +0 -0
  517. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/semantic_judge_live_validate.py +0 -0
  518. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/semantic_judge_probe.py +0 -0
  519. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/snapshot_leg_a_eval.py +0 -0
  520. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/stack_correctness_validate.py +0 -0
  521. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/table_retrieval_smoke.py +0 -0
  522. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_function_classifier.py +0 -0
  523. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_legalbert_function.py +0 -0
  524. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_legalbert_modal.py +0 -0
  525. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/typed_rerank_validate.py +0 -0
  526. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/verify_wheel_install.sh +0 -0
  527. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_extraction_ab.py +0 -0
  528. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_kg_query_validate.py +0 -0
  529. {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_raw_diagnostic.py +0 -0
  530. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
  531. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
  532. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
  533. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
  534. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
  535. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
  536. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
  537. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  538. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
  539. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  540. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  541. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  542. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  543. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  544. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
  545. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
  546. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/__init__.py +0 -0
  547. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/__init__.py +0 -0
  548. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/agents.py +0 -0
  549. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/answers.py +0 -0
  550. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/config.py +0 -0
  551. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/discover.py +0 -0
  552. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/documents.py +0 -0
  553. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/ids.py +0 -0
  554. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/invoke.py +0 -0
  555. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/mcp.py +0 -0
  556. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/tracing.py +0 -0
  557. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/usage.py +0 -0
  558. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/workspace.py +0 -0
  559. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/__init__.py +0 -0
  560. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
  561. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/ard.py +0 -0
  562. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
  563. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
  564. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
  565. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_parse.py +0 -0
  566. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_scope.py +0 -0
  567. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding.py +0 -0
  568. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  569. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  570. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/fusion.py +0 -0
  571. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_query.py +0 -0
  572. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
  573. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  574. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/invoke.py +0 -0
  575. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
  576. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/manifests.py +0 -0
  577. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/parse_audit.py +0 -0
  578. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/parsing.py +0 -0
  579. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/registry.py +0 -0
  580. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  581. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/reranking.py +0 -0
  582. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  583. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  584. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  585. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
  586. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  587. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  588. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_search.py +0 -0
  589. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  590. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  591. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/__init__.py +0 -0
  592. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/chunk.py +0 -0
  593. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/evals.py +0 -0
  594. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/extraction.py +0 -0
  595. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/graph.py +0 -0
  596. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/identifiers.py +0 -0
  597. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/ingestion.py +0 -0
  598. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/provenance.py +0 -0
  599. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/span.py +0 -0
  600. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/__init__.py +0 -0
  601. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/canonicalize.py +0 -0
  602. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/document_parser.py +0 -0
  603. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/embedded.py +0 -0
  604. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/http.py +0 -0
  605. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/__init__.py +0 -0
  606. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/gold.py +0 -0
  607. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/langfuse_backend.py +0 -0
  608. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/runner.py +0 -0
  609. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/scorers.py +0 -0
  610. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/__init__.py +0 -0
  611. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/accounting.py +0 -0
  612. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/agent.py +0 -0
  613. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/batch.py +0 -0
  614. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/clarify.py +0 -0
  615. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/confirm.py +0 -0
  616. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/decisions.py +0 -0
  617. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/definition.py +0 -0
  618. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/dispatch.py +0 -0
  619. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/errors.py +0 -0
  620. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/events.py +0 -0
  621. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/filesystem.py +0 -0
  622. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/grading.py +0 -0
  623. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/interpreter.py +0 -0
  624. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/memory.py +0 -0
  625. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/models.py +0 -0
  626. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/rules.py +0 -0
  627. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/runs.py +0 -0
  628. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/scope.py +0 -0
  629. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/seen.py +0 -0
  630. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/skills.py +0 -0
  631. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/thinking.py +0 -0
  632. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/tiers.py +0 -0
  633. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/tracing.py +0 -0
  634. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/withhold.py +0 -0
  635. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/workers.py +0 -0
  636. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/__init__.py +0 -0
  637. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/evaluate.py +0 -0
  638. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/group.py +0 -0
  639. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/layout.py +0 -0
  640. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/segment.py +0 -0
  641. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/tables.py +0 -0
  642. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/__init__.py +0 -0
  643. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/model_servers.py +0 -0
  644. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/profiles.py +0 -0
  645. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/seam.py +0 -0
  646. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/tag_structured.py +0 -0
  647. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/tracing.py +0 -0
  648. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/usage.py +0 -0
  649. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/weights.py +0 -0
  650. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/__init__.py +0 -0
  651. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/pack_schema.py +0 -0
  652. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/registry.py +0 -0
  653. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/pack_sdk/__init__.py +0 -0
  654. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/__init__.py +0 -0
  655. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
  656. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  657. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  658. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  659. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  660. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  661. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  662. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
  663. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  664. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
  665. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  666. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  667. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  668. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  669. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/pack.py +0 -0
  670. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  671. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  672. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  673. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  674. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  675. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  676. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  677. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  678. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  679. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  680. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  681. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  682. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  683. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  684. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  685. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
  686. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  687. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  688. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  689. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  690. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
  691. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  692. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  693. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  694. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  695. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  696. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  697. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  698. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  699. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  700. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  701. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  702. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  703. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  704. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  705. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  706. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
  707. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  708. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  709. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  710. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  711. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  712. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  713. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  714. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  715. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  716. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  717. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/options.py +0 -0
  718. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/pack.py +0 -0
  719. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  720. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  721. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  722. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  723. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  724. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  725. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  726. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  727. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  728. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  729. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  730. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  731. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  732. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  733. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  734. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  735. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  736. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  737. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  738. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  739. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  740. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  741. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  742. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  743. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  744. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  745. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  746. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  747. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  748. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  749. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  750. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  751. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  752. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  753. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  754. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  755. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  756. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  757. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  758. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  759. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  760. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  761. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  762. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  763. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  764. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  765. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  766. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  767. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/reference_seam.py +0 -0
  768. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/py.typed +0 -0
  769. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/__init__.py +0 -0
  770. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
  771. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/generation/__init__.py +0 -0
  772. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  773. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
  774. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/agent.py +0 -0
  775. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  776. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  777. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  778. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/spans/__init__.py +0 -0
  779. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/spans/page_map.py +0 -0
  780. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/__init__.py +0 -0
  781. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/chunk_text.py +0 -0
  782. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/__init__.py +0 -0
  783. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  784. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/observability.py +0 -0
  785. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
  786. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  787. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/__init__.py +0 -0
  788. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/concurrent.py +0 -0
  789. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/devices.py +0 -0
  790. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/pdfium.py +0 -0
  791. {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/spacy_model.py +0 -0
  792. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/__init__.py +0 -0
  793. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/__init__.py +0 -0
  794. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_agent_chat_model.py +0 -0
  795. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_agent_chat_model_live.py +0 -0
  796. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_answers_exports.py +0 -0
  797. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_api_embedder_ps39.py +0 -0
  798. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_bytes_ingest.py +0 -0
  799. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_capability_reexports.py +0 -0
  800. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_decision_swap_doc_example.py +0 -0
  801. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_discover.py +0 -0
  802. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_documents.py +0 -0
  803. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_drop_workspace.py +0 -0
  804. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_drop_workspace_live.py +0 -0
  805. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_e2e.py +0 -0
  806. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_invoke.py +0 -0
  807. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_mcp.py +0 -0
  808. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_metering_tracing_exports.py +0 -0
  809. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_migrate_span_fields.py +0 -0
  810. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_model_role_export.py +0 -0
  811. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_open_workspace_reconfig.py +0 -0
  812. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_options.py +0 -0
  813. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_sdk.py +0 -0
  814. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_sdk_segmenter.py +0 -0
  815. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_store.py +0 -0
  816. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pdf_page_count.py +0 -0
  817. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_public_gaps_ps38.py +0 -0
  818. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_tracing_helpers_ps32.py +0 -0
  819. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_usage.py +0 -0
  820. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_workspace.py +0 -0
  821. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_workspace_models.py +0 -0
  822. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
  823. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_api_docs_current.py +0 -0
  824. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_doc_references.py +0 -0
  825. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  826. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_import_contracts.py +0 -0
  827. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_lock_version.py +0 -0
  828. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
  829. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_pdfium_door.py +0 -0
  830. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_shipped_skills.py +0 -0
  831. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/async_helpers.py +0 -0
  832. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/__init__.py +0 -0
  833. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  834. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator.py +0 -0
  835. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator_async.py +0 -0
  836. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_assertion_extraction.py +0 -0
  837. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_authoring_contract.py +0 -0
  838. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunk_read.py +0 -0
  839. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunk_write.py +0 -0
  840. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  841. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_claim_extraction.py +0 -0
  842. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
  843. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_compliance_judgment.py +0 -0
  844. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_compliance_store.py +0 -0
  845. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
  846. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store.py +0 -0
  847. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  848. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  849. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_adapter.py +0 -0
  850. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_async.py +0 -0
  851. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_extraction.py +0 -0
  852. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_model_seam.py +0 -0
  853. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_private.py +0 -0
  854. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_disambiguation.py +0 -0
  855. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_document_scope.py +0 -0
  856. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_embedding.py +0 -0
  857. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_embedding_profiles.py +0 -0
  858. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_entity_resolution.py +0 -0
  859. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  860. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_fusion.py +0 -0
  861. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_extraction.py +0 -0
  862. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_query.py +0 -0
  863. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_storage.py +0 -0
  864. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_highlight_serve.py +0 -0
  865. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_hybrid_search.py +0 -0
  866. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_jev_decision.py +0 -0
  867. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_manifest_validation.py +0 -0
  868. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_manifests.py +0 -0
  869. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parse_audit.py +0 -0
  870. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parsing.py +0 -0
  871. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parties_extraction.py +0 -0
  872. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  873. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_query_function_classifier.py +0 -0
  874. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_query_understanding.py +0 -0
  875. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_registry.py +0 -0
  876. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_remote_encoders.py +0 -0
  877. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_repair_partition.py +0 -0
  878. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_requirement_extraction.py +0 -0
  879. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_reranking.py +0 -0
  880. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_retrieval_core.py +0 -0
  881. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking.py +0 -0
  882. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  883. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_method.py +0 -0
  884. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
  885. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_runtime_registry.py +0 -0
  886. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_scan_quality.py +0 -0
  887. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  888. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_span_search.py +0 -0
  889. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  890. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
  891. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  892. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_tiered_ocr.py +0 -0
  893. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_vlm_ocr.py +0 -0
  894. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/compliance_fakes.py +0 -0
  895. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/conftest.py +0 -0
  896. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/__init__.py +0 -0
  897. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  898. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_chunk_record.py +0 -0
  899. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_compliance.py +0 -0
  900. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  901. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_extraction.py +0 -0
  902. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_function.py +0 -0
  903. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_function_routing.py +0 -0
  904. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_identifiers.py +0 -0
  905. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_ingestion_hooks.py +0 -0
  906. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_jurisdiction.py +0 -0
  907. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_ontology.py +0 -0
  908. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_property.py +0 -0
  909. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_provenance.py +0 -0
  910. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_value_match.py +0 -0
  911. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/__init__.py +0 -0
  912. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/_ooxml_fixtures.py +0 -0
  913. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_canonicalize.py +0 -0
  914. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_cuad.py +0 -0
  915. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_cuad_ingestion.py +0 -0
  916. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_document_parser.py +0 -0
  917. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_edgar.py +0 -0
  918. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_embedded.py +0 -0
  919. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_gcs_ingestion.py +0 -0
  920. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_http.py +0 -0
  921. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_parse_wire2.py +0 -0
  922. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_selection.py +0 -0
  923. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_contractnli_judge.py +0 -0
  924. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  925. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_kg_property_rerank.py +0 -0
  926. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
  927. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_relational_eval.py +0 -0
  928. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/__init__.py +0 -0
  929. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_gold_contracts.py +0 -0
  930. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_gold_import.py +0 -0
  931. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_langfuse_backend.py +0 -0
  932. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_runner.py +0 -0
  933. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorer_parity.py +0 -0
  934. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_a.py +0 -0
  935. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_b.py +0 -0
  936. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_c.py +0 -0
  937. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_d.py +0 -0
  938. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity.json +0 -0
  939. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
  940. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
  941. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
  942. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
  943. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
  944. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  945. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  946. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  947. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/README.md +0 -0
  948. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  949. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
  950. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/__init__.py +0 -0
  951. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  952. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/test_model_seam_structured.py +0 -0
  953. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/__init__.py +0 -0
  954. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_greenfield_conformance.py +0 -0
  955. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_accounting.py +0 -0
  956. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_engine_wiring.py +0 -0
  957. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_genericity.py +0 -0
  958. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_live.py +0 -0
  959. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_recorder.py +0 -0
  960. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_thinking.py +0 -0
  961. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/__init__.py +0 -0
  962. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_aevaluate.py +0 -0
  963. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  964. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  965. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_document_metadata.py +0 -0
  966. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_evaluate.py +0 -0
  967. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_evaluate_labels.py +0 -0
  968. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_graph_live.py +0 -0
  969. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_layout_segmenter.py +0 -0
  970. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_sheet_continuations.py +0 -0
  971. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_split_tables.py +0 -0
  972. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
  973. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_table_rows.py +0 -0
  974. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_tuning.py +0 -0
  975. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unit_grouper.py +0 -0
  976. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unit_representative.py +0 -0
  977. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unreached_rows.py +0 -0
  978. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/incidents_domain.py +0 -0
  979. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/incidents_pack.ttl +0 -0
  980. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/test_incidents_journey.py +0 -0
  981. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/test_pack_schema.py +0 -0
  982. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/__init__.py +0 -0
  983. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_compliance_server.py +0 -0
  984. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
  985. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  986. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_relational_qa_server.py +0 -0
  987. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  988. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/__init__.py +0 -0
  989. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_async_infra.py +0 -0
  990. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_classifier_heads_load_clean.py +0 -0
  991. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_model_servers.py +0 -0
  992. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_models_dir.py +0 -0
  993. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_no_gemma_default.py +0 -0
  994. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_profile_routing.py +0 -0
  995. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_profile_seam.py +0 -0
  996. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_async.py +0 -0
  997. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_deadline_and_cap.py +0 -0
  998. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_event_loops.py +0 -0
  999. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_retry.py +0 -0
  1000. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_stream.py +0 -0
  1001. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_serving_seam.py +0 -0
  1002. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_serving_wiring.py +0 -0
  1003. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tag_structured.py +0 -0
  1004. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tag_structured_async.py +0 -0
  1005. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tracing.py +0 -0
  1006. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_usage.py +0 -0
  1007. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/__init__.py +0 -0
  1008. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_clause_template.py +0 -0
  1009. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  1010. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_derivation.py +0 -0
  1011. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_entity_taxonomy.py +0 -0
  1012. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  1013. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  1014. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  1015. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  1016. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/reference/test_compliance_reference.py +0 -0
  1017. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/reference/test_contract_seam.py +0 -0
  1018. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
  1019. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
  1020. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_fetch_reference_models.py +0 -0
  1021. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_generation_robustness_errors.py +0 -0
  1022. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/__init__.py +0 -0
  1023. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/test_creating_evals_skill_example.py +0 -0
  1024. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/test_ingestion_skill_example.py +0 -0
  1025. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_boundary.py +0 -0
  1026. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_classifier_property_extractor.py +0 -0
  1027. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  1028. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier.py +0 -0
  1029. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
  1030. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor.py +0 -0
  1031. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  1032. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_dim_classifier.py +0 -0
  1033. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_dim_fleet_live.py +0 -0
  1034. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_function_classifier.py +0 -0
  1035. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_hybrid_classifier.py +0 -0
  1036. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
  1037. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_legalbert_classifier.py +0 -0
  1038. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_model_capabilities.py +0 -0
  1039. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_new_function_labels.py +0 -0
  1040. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_page_map.py +0 -0
  1041. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_property_extractor.py +0 -0
  1042. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_property_grounding.py +0 -0
  1043. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_reclassify.py +0 -0
  1044. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_residual_decision.py +0 -0
  1045. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_scarce_function_labels.py +0 -0
  1046. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_segment.py +0 -0
  1047. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_segmentation_vocab.py +0 -0
  1048. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_semantic_judge.py +0 -0
  1049. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
  1050. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_setfit_probabilities.py +0 -0
  1051. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_span_offsets.py +0 -0
  1052. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_stage_labels_0005.py +0 -0
  1053. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_symbolic_validation.py +0 -0
  1054. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_tag_clause_extractor.py +0 -0
  1055. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/__init__.py +0 -0
  1056. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_affiliation_backfill.py +0 -0
  1057. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
  1058. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_contract.py +0 -0
  1059. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_property.py +0 -0
  1060. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1061. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_span.py +0 -0
  1062. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_chunk_text.py +0 -0
  1063. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_concurrent_writes.py +0 -0
  1064. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_contract_kg_store_live.py +0 -0
  1065. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_document_metadata_live.py +0 -0
  1066. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_document_scope.py +0 -0
  1067. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_engine_domain_neutral.py +0 -0
  1068. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_entities_by_name.py +0 -0
  1069. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_contains.py +0 -0
  1070. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_edges.py +0 -0
  1071. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_identifiers.py +0 -0
  1072. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_mutations.py +0 -0
  1073. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_range.py +0 -0
  1074. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_read.py +0 -0
  1075. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_write.py +0 -0
  1076. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_neutral_schema.py +0 -0
  1077. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_pack_schema_properties.py +0 -0
  1078. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_pooled_client.py +0 -0
  1079. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_store_create_flag.py +0 -0
  1080. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_write_graph_idempotent.py +0 -0
  1081. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/__init__.py +0 -0
  1082. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_async_ingestion.py +0 -0
  1083. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1084. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_clause_results.py +0 -0
  1085. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_check.py +0 -0
  1086. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1087. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  1088. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1089. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1090. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_write_retry.py +0 -0
  1091. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_graph_extraction.py +0 -0
  1092. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1093. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1094. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1095. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_observability.py +0 -0
  1096. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1097. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1098. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_relational_qa.py +0 -0
  1099. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1100. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_scaffold.py +0 -0
  1101. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1102. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1103. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1104. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_backfill_clause_span_id.py +0 -0
  1105. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_dg_model_ab.py +0 -0
  1106. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_populate_clause_kg.py +0 -0
  1107. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_populate_entity_graph.py +0 -0
  1108. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/__init__.py +0 -0
  1109. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_concurrent.py +0 -0
  1110. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_devices.py +0 -0
  1111. {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_spacy_model.py +0 -0
@@ -199,7 +199,11 @@ category.
199
199
  - **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
200
200
  whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
201
201
  `document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
202
- mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key.
202
+ mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
203
+ emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
204
+ (PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
205
+ off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
206
+ provenance).
203
207
  - **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
204
208
  saver; the engine ships none) and a `run_id` naming the run:
205
209
  `await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
@@ -208,8 +212,9 @@ category.
208
212
  sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
209
213
  LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
210
214
  - **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
211
- key but is not fully idempotent for edges (engine gap G8): when a source is re-run, remove its previous records
212
- first (`kg_delete` on the provenance your records carry, such as a per-source property) and write again.
215
+ key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
216
+ source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
217
+ provenance your records carry, such as a per-source property) and write again.
213
218
 
214
219
  ## 6. Verify (definition of done)
215
220
 
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.17.1"
3
+ }
@@ -4,6 +4,13 @@ All notable changes to RAG_Wright are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
5
5
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.17.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.17.0...0.17.1) (2026-11-07)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **PS-63:** the default record writer keeps one edge per type and endpoints (G8) ([e77ca91](https://github.com/fzaidi-dai/RAG_Wright/commit/e77ca9151e8cd5a425237f30ada721349eac7bb0))
13
+
7
14
  ## [0.17.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.1...0.17.0) (2026-11-05)
8
15
 
9
16
 
@@ -55,7 +55,13 @@ The failure mode to avoid, which has happened before: a command fails with "modu
55
55
 
56
56
  ## Start of every session
57
57
 
58
- > **CURRENT STATE (2026-11-01): `rag-wright` 0.16.1 is RELEASED** (PR #20; RuleWright's two requests and a finding
58
+ > **CURRENT STATE (2026-11-07): PS-63 done, unreleased** (TexWright's G8 request: the default record writer keeps one
59
+ > edge per type and endpoints, `kg_write(..., ensure_edges=True)`, ADR-0142). Next: PS-48, EV-7, PS-30, PS-33. Before it,
60
+ > **`rag-wright` 0.17.0 is RELEASED** (PR #21; TexWright's request: PS-60 a table over
61
+ > the chunk cap is split between lines with its header repeated, so every row keeps its span and `TableRow` (ADR-0141);
62
+ > PS-61 the default segmenter `segment_layout` is on `pack_sdk`; PS-62 a record table's rows that reach no unit are
63
+ > reported, `DocumentReport.unreached_table_rows`). Next: PS-48, EV-7, PS-30, PS-33. Before it,
64
+ > **`rag-wright` 0.16.1 is RELEASED** (PR #20; RuleWright's two requests and a finding
59
65
  > from them: PS-57 a retried contracts-pack write no longer loses a document's clauses, the ArcadeDB conflict budget is
60
66
  > configurable (default 20 attempts / 2 s cap) and a racing UPSERT's duplicate key is retried; PS-58 a `RecordWriter`
61
67
  > returns the count that landed; PS-59 the store's client keeps keep-alive connections, one session per thread). Next:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rag-wright
3
- Version: 0.17.0
3
+ Version: 0.17.1
4
4
  Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
5
5
  Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
6
6
  Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
@@ -0,0 +1,32 @@
1
+ # ADR-0142: The default record writer keeps one edge per type and endpoints
2
+
3
+ **Status:** accepted · **Date:** 2026-11-07 · **Related:** PS-63, engine gap G8, TexWright's request
4
+ `2026-10-15-g8-duplicates-edges-within-one-ingest.md`, ADR-0124 (ING-4b `kg_ensure_edges`), issue 0029
5
+ (`outV()`/`inV()` endpoint filters)
6
+
7
+ ## Context
8
+
9
+ With no `writer=`, `build_ingestion` wrote records with `kg_write`: nodes upserted by key, edges created with a plain
10
+ `CREATE EDGE`. The engine's own guidance has an entity several units mention emitted by its key from each unit, so
11
+ each such unit also emitted the edge to it, and that edge landed once per unit, within one ingest and again on every
12
+ re-ingest. Node counts stayed right, so only a traversal showed it (TexWright: 3 children read back as 6). The
13
+ store's idempotent `kg_ensure_edges` runs a query and a write per edge outside any transaction, and scans the edge
14
+ type for each edge.
15
+
16
+ ## Decision
17
+
18
+ - `Store.kg_write` takes `ensure_edges` (default `False`). When true, an edge is identified by its type and its two
19
+ endpoints (direction counts): the batch keeps each edge's last props; each edge is an index-driven `UPDATE` of an
20
+ existing one, reached through `outE` from its indexed from node, then `CREATE EDGE ... IF NOT EXISTS`, all in the
21
+ write's one transaction under the same conflict retry. ArcadeDB 26.7 was probed live: `IF NOT EXISTS` holds within
22
+ one transaction, across transactions and across concurrent writers.
23
+ - The ingestion default writer passes `True`; `rag_wright.api.kg_write` exposes the flag for a domain's own writer.
24
+ - Without the flag `kg_write` is unchanged: a caller whose parallel edges each carry their own provenance (the
25
+ reference pack's clause-to-value assertions, RuleWright's writer) keeps them.
26
+
27
+ ## Consequences
28
+
29
+ - An edge several units emit, or a re-ingest writes again, lands once with the last unit's props; G8 is closed.
30
+ - A domain that means parallel edges of one type between the same two nodes, and uses the default writer, now gets
31
+ one; it passes a `writer=` that calls `kg_write` without the flag.
32
+ - A re-ingest still does not remove records a document no longer yields. `kg_ensure_edges` is unchanged.
@@ -197,4 +197,5 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
197
197
  0138 PDF parses run one at a time, and the engine reaches pdfium through one locked door ·
198
198
  0139 The agent harness substrate is engine scope ·
199
199
  0140 One model family on Metal, under one process lock ·
200
- 0141 The cap's hard split cuts between lines and repeats a table's header
200
+ 0141 The cap's hard split cuts between lines and repeats a table's header ·
201
+ 0142 The default record writer keeps one edge per type and endpoints
@@ -430,9 +430,9 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
430
430
 
431
431
  Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence), a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`) or a `Contains` (a literal substring, case-insensitive unless `case_sensitive=True`; an empty field never matches: `{"composition": Contains("UHMWPE")}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit. Every name is checked, never interpolated unchecked (the module docstring): a request-chosen field is safe, but an unknown one matches nothing.
432
432
 
433
- ### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
433
+ ### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = (), *, ensure_edges: 'bool' = False) -> 'None'`
434
434
 
435
- Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write.
435
+ Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per (type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer.
436
436
 
437
437
  ### `kg_edges(ws: 'WorkspaceHandle', from_type: 'Optional[str]' = None, *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None, direction: 'str' = 'out', edge_type: 'Optional[str]' = None, edge_where: 'Optional[dict]' = None, target_where: 'Optional[dict]' = None, select: 'dict') -> 'list[dict]'`
438
438
 
@@ -182,7 +182,7 @@ Group into units (checked), attach table rows, extract each unit concurrently (p
182
182
 
183
183
  #### `IngestionStages.write(self, sd: 'Any', extractions: 'list') -> 'int'`
184
184
 
185
- Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
185
+ Persist the records (the domain's writer, else `kg_write` with idempotent edges). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
186
186
 
187
187
  #### `IngestionStages.write_document_node(self, doc_id: 'str', *, parent_id: 'Optional[str]', filename: 'str', media_type: 'str', sha256: 'str', metadata: 'Optional[dict]' = None) -> 'None'`
188
188
 
@@ -53,13 +53,16 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
53
53
  - **Proposed:** a generic reader in `ontology.pack_schema` (or similar) over an engine-namespaced criterion
54
54
  vocabulary.
55
55
 
56
- ### G8: The default record writer is not fully idempotent
57
- - **Where:** with no `writer=`, `build_ingestion` writes with the store's `kg_write`: nodes are upserted by their key,
58
- but edges are created (`CREATE EDGE`), so re-ingesting a document duplicates its record edges. The store's
59
- idempotent `kg_ensure_edges` (used for `EmbeddedIn` / `AttachedTo`) is not exported from `rag_wright.api`.
60
- - **Impact:** a domain whose extractor returns edges must pass its own idempotent `writer`, or clear the document's
61
- records before a re-ingest.
62
- - **Proposed:** make the default writer use `kg_ensure_edges`, or export it.
56
+ ### G8: The default record writer is not fully idempotent (closed by PS-63)
57
+ - **Where:** with no `writer=`, `build_ingestion` wrote with the store's `kg_write`: nodes were upserted by their key,
58
+ but edges were created (`CREATE EDGE`).
59
+ - **Impact:** not only a re-ingest. Within ONE ingest of one document, an edge that several units emit (an entity
60
+ several rows mention, emitted by its key from each unit) landed once per unit, so a traversal over-counted while
61
+ node counts looked right (TexWright, 2026-10-15).
62
+ - **Closed by PS-63 (ADR-0142):** the default writer calls `kg_write(..., ensure_edges=True)`: at most one edge per
63
+ (type, from node, to node), within the write, across writes and across concurrent writers, the last props landing,
64
+ in the same one transaction. A domain `writer=` gets the same with `rag_wright.api.kg_write(ws, nodes, edges,
65
+ ensure_edges=True)`; without the flag `kg_write` still keeps parallel edges.
63
66
 
64
67
  ### G9: One domain pack per workspace through the public API
65
68
  - **Where:** `EngineConfig.pack` takes one `.ttl`. A second pack's schema needs the store-internal
@@ -221,10 +221,11 @@ ask-first change.
221
221
  citation**.
222
222
  - **What is cached on a re-ingest:** in `build_ingestion`, parse and chunk are content-hash cached; spans,
223
223
  record nodes and the `Document` node are upserted by key; the `EmbeddedIn` / `AttachedTo` edges are ensured (never
224
- duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive), and the
225
- default writer creates record edges rather than ensuring them, so re-ingesting a document whose extractor returns
226
- edges duplicates them unless your `writer` is idempotent (engine gap G8). A boundary decider is not cached either
227
- (engine gap G6).
224
+ duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive). The
225
+ default writer ensures record edges too (PS-63): one edge per (type, from node, to node), whether several units
226
+ emit it or a re-ingest writes it again, with the last props landing; a domain `writer=` gets the same from
227
+ `kg_write(ws, nodes, edges, ensure_edges=True)`. A re-ingest does not remove records a document no longer yields.
228
+ A boundary decider is not cached either (engine gap G6).
228
229
 
229
230
  ## Building your own
230
231
 
@@ -134,4 +134,5 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
134
134
  | PS-60 | TexWright (2026-11-05, `2026-11-05-export-the-default-segmenter-on-pack-sdk.md`): a table over the chunk cap was hard-split at a fixed length, mid-row; the rows after the cut lost their table layout (one span between them, no `TableRow`), and one item `chunk_layouts` could not place blocked every later item's layout. 4 of 140 records lost silently | the cut falls between lines and repeats the table's header in each continuation chunk; an unplaceable item no longer blocks later ones; a manifest cached with the old cut is re-chunked once; live: a 140-record x 76-column workbook yields 140 records | done 2026-11-05 (ADR-0141): live, the workbook (280 rows, two per record) gave 280/280 row records, 75/280 with the old cut |
135
135
  | PS-61 | TexWright's question in the same request: the default segmenter `segment_layout` is on neither public tier, so a pack cannot wrap it | export it on `rag_wright.pack_sdk` | done 2026-11-05: `pack_sdk.segment_layout` (the engine's own object); the wrap-the-default pattern in `kg-construction.md` and the ingestion skill; a pack segmenter delegating to it runs through `build_ingestion` |
136
136
  | PS-62 | TexWright, same request: the loss was silent (every `check_*` passed) | a record table whose rows do not each reach a unit with its `TableRow` is reported in the `IngestionReport` | done 2026-11-05: `DocumentReport.unreached_table_rows` (`table_ref`, `sheet`, `reached`, `total`, `missing`) and an `[ingest] warning:` line; a block table is not a loss; live, the pre-PS-60 cut on the workbook reports 75 of 280 rows reached (205 missing, matching the records lost), the new cut reports nothing |
137
+ | PS-63 | TexWright, `2026-10-15-g8-duplicates-edges-within-one-ingest.md` (gap G8): the default writer created every edge, so an edge several units emit (an entity several rows mention) landed once per unit, within one ingest and on every re-ingest | the default writer leaves one edge per (type, from node, to node); `api.kg_write` exposes the same; `kg_write` without the flag unchanged | done 2026-11-07: `kg_write(..., ensure_edges=)` (ADR-0142), the default writer passes it, `api.kg_write` exposes it; G8 closed, the ingestion skill and the KG-construction guide updated; live, TexWright's shape (140 children on two rows each, 20 parents) leaves 140 edges on an ingest and a re-ingest (280 then 560 before) |
137
138
  | PS-48 | Port the agent harness's substrate behaviour tests from RuleWright onto the engine's fabric fixture (ADR-0139 handover): of RuleWright's 553 harness-touching tests, 314 test the substrate (port), 213 RuleWright's composition (stay), 25 live (1 substrate: OpenRouter cost accounting). Seven gated sub-tasks: **a** shared `tests/harness/fabric.py` + scripting/slow/hanging/failing fake models + `InMemorySaver` helpers, then events, skills, clarify (~23); **b** models and errors (~42); **c** runs, confirm, continuation (~32); **d** decisions and rules (~51); **e** grading (~32); **f** seen and memory (~41); **g** workers, batch, dispatch, tiers, agent wiring, filesystem, interpreter, withhold + the live accounting test (~93, may split). Ambiguous tests split, not moved whole; a ported test failing on engine code is a substrate defect fixed in that sub-task; deadline globals via monkeypatch; no new dependencies. Follow-up (owner RuleWright): retire its substrate duplicates once ported | each sub-task's ported tests green on the fabric fixture | todo (proposed; awaiting go-ahead) |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rag-wright"
3
- version = "0.17.0"
3
+ version = "0.17.1"
4
4
  description = "A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.13"
@@ -199,7 +199,11 @@ category.
199
199
  - **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
200
200
  whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
201
201
  `document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
202
- mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key.
202
+ mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
203
+ emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
204
+ (PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
205
+ off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
206
+ provenance).
203
207
  - **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
204
208
  saver; the engine ships none) and a `run_id` naming the run:
205
209
  `await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
@@ -208,8 +212,9 @@ category.
208
212
  sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
209
213
  LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
210
214
  - **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
211
- key but is not fully idempotent for edges (engine gap G8): when a source is re-run, remove its previous records
212
- first (`kg_delete` on the provenance your records carry, such as a per-source property) and write again.
215
+ key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
216
+ source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
217
+ provenance your records carry, such as a per-source property) and write again.
213
218
 
214
219
  ## 6. Verify (definition of done)
215
220
 
@@ -62,11 +62,12 @@ def kg_update(ws: WorkspaceHandle, type_name: str, *, set: dict, where: Optional
62
62
  return ws._store.kg_update(type_name, set=set, where=where, key_range=key_range)
63
63
 
64
64
 
65
- def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = ()) -> None:
65
+ def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = (), *, ensure_edges: bool = False) -> None:
66
66
  """Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are
67
67
  `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type
68
- the workspace's schema does not declare fails the write."""
69
- ws._store.kg_write(nodes, edges)
68
+ the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per
69
+ (type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer."""
70
+ ws._store.kg_write(nodes, edges, ensure_edges=ensure_edges)
70
71
 
71
72
 
72
73
  def kg_edges(ws: WorkspaceHandle, from_type: Optional[str] = None, *, where: Optional[dict] = None,
@@ -259,9 +259,9 @@ class IngestionStages:
259
259
  return stage
260
260
 
261
261
  async def write(self, sd: Any, extractions: list) -> int:
262
- """Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own
263
- count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one
264
- transaction (it raises rather than land part of them)."""
262
+ """Persist the records (the domain's writer, else `kg_write` with idempotent edges). Returns the number that
263
+ landed: the writer's own count when it returns one; else the record nodes handed over, which the default
264
+ `kg_write` lands in one transaction (it raises rather than land part of them)."""
265
265
  if self.writer is not None:
266
266
  landed = await self.writer(sd.source_doc_id, extractions)
267
267
  if landed is not None:
@@ -269,7 +269,8 @@ class IngestionStages:
269
269
  else:
270
270
  nodes = [n for e in extractions for n in e.nodes]
271
271
  edges = [ed for e in extractions for ed in e.edges]
272
- await asyncio.to_thread(self.store.kg_write, nodes, edges)
272
+ # PS-63 (G8): an edge several units emit (an entity several rows mention), or a re-ingest, lands once
273
+ await asyncio.to_thread(self.store.kg_write, nodes, edges, ensure_edges=True)
273
274
  return sum(len(e.nodes) for e in extractions)
274
275
 
275
276
  def write_document_node(self, doc_id: str, *, parent_id: Optional[str], filename: str, media_type: str,
@@ -841,9 +841,12 @@ class ArcadeDBStore:
841
841
  self._prop_types_cache = cache
842
842
  return cache.get(type_name, {})
843
843
 
844
- def kg_write(self, nodes, edges=()) -> None:
844
+ def kg_write(self, nodes, edges=(), *, ensure_edges: bool = False) -> None:
845
845
  """Upsert typed `nodes` (by `key_field`) then create typed `edges`, all in one transaction (see
846
- `Store.kg_write`). Node props encode by the type's pack-declared storage type; edge props are type-driven."""
846
+ `Store.kg_write`). Node props encode by the type's pack-declared storage type; edge props are type-driven.
847
+ With `ensure_edges` (PS-63) an edge is one per (type, from node, to node): the batch keeps each one's last
848
+ props, an existing edge has them set (reached from its indexed from node, not by scanning the edge type),
849
+ and `CREATE EDGE ... IF NOT EXISTS` adds it only when absent."""
847
850
  nodes, edges = list(nodes), list(edges)
848
851
  for n in nodes:
849
852
  _kg_check_node(n)
@@ -855,13 +858,24 @@ class ArcadeDBStore:
855
858
  sets = ", ".join(f"{k} = {_kg_encode(v, types.get(k))}" for k, v in n.props.items())
856
859
  key_sql = _kg_encode(n.props[n.key_field], types.get(n.key_field))
857
860
  statements.append(f"UPDATE {n.type} SET {sets} UPSERT WHERE {n.key_field} = {key_sql}")
861
+ if ensure_edges:
862
+ edges = list({(e.type, e.from_type, e.from_key_field, e.from_key, e.to_type, e.to_key_field, e.to_key): e
863
+ for e in edges}.values())
858
864
  for e in edges:
865
+ props = ", ".join(f"{k} = {_kg_sql(v)}" for k, v in e.props.items())
866
+ if ensure_edges and props:
867
+ statements.append(
868
+ f"UPDATE (SELECT FROM (SELECT expand(outE('{e.type}')) FROM {e.from_type}"
869
+ f" WHERE {e.from_key_field} = {_kg_sql(e.from_key)})"
870
+ f" WHERE inV().{e.to_key_field} = {_kg_sql(e.to_key)}) SET {props}")
859
871
  stmt = (
860
872
  f"CREATE EDGE {e.type}"
861
873
  f" FROM (SELECT FROM {e.from_type} WHERE {e.from_key_field} = {_kg_sql(e.from_key)})"
862
874
  f" TO (SELECT FROM {e.to_type} WHERE {e.to_key_field} = {_kg_sql(e.to_key)})")
863
- if e.props:
864
- stmt += " SET " + ", ".join(f"{k} = {_kg_sql(v)}" for k, v in e.props.items())
875
+ if ensure_edges:
876
+ stmt += " IF NOT EXISTS"
877
+ if props:
878
+ stmt += " SET " + props
865
879
  statements.append(stmt)
866
880
  if statements:
867
881
  # every node is an UPSERT, so a duplicate key here is two writers racing to create one node
@@ -278,10 +278,13 @@ class Store(Protocol):
278
278
  `v.<f>` (far vertex) for a traversal; or a bare edge field / `inV().<f>` / `outV().<f>` for an edge scan.
279
279
  A membership value that is an EMPTY list means scope-to-nothing -> `[]` with no query. Returns the rows."""
280
280
 
281
- def kg_write(self, nodes: list["KgNode"], edges: "Iterable[KgEdge]" = ()) -> None:
281
+ def kg_write(self, nodes: list["KgNode"], edges: "Iterable[KgEdge]" = (), *, ensure_edges: bool = False) -> None:
282
282
  """Upsert typed `nodes` (by each node's `key_field`) then create typed `edges` (FROM/TO by node key), ALL in
283
283
  ONE transaction, nodes first so endpoints exist. The caller passes DOMAIN-NATIVE values; the store owns all
284
- wire encoding, driven by each node type's pack-declared property storage type. Empty input is a no-op."""
284
+ wire encoding, driven by each node type's pack-declared property storage type. Empty input is a no-op.
285
+ `ensure_edges` (PS-63): at most one edge per (type, from node, to node), within the call, across calls and
286
+ across concurrent writers; an edge written again has the last props set on it. Without it every
287
+ edge is created, so parallel edges that each carry their own provenance are kept."""
285
288
 
286
289
  def kg_ensure_edges(self, edges: "Iterable[KgEdge]") -> int:
287
290
  """ING-4b: write typed edges IDEMPOTENTLY -- create an edge only when none of its type already joins the
@@ -3,7 +3,9 @@
3
3
  Phase 2 output. The persistent, cross-session task ledger and shared memory of progress. Derived
4
4
  from `plan.md` (Phase 1) and `SPEC.md` v0.1, honoring ADR-0001 (stack) and ADR-0002 (corpus).
5
5
 
6
- > **2026-11-05: PS-60 done, unreleased** (TexWright's request: a table over the chunk cap is split between lines with its header repeated, so every row keeps its own span and `TableRow`; ADR-0141). PS-61 done, unreleased (TexWright's question: the default segmenter `segment_layout` is exported on `pack_sdk`, so a pack can wrap it). PS-62 done, unreleased (a record table's rows that reach no unit are reported: `DocumentReport.unreached_table_rows` and an `[ingest] warning:` line). Next: reply to TexWright, then PS-48.
6
+ > **2026-11-07: PS-63 done, unreleased** (TexWright's request `2026-10-15-g8-duplicates-edges-within-one-ingest.md`, gap G8): the default record writer keeps one edge per (type, from node, to node), within an ingest and across re-ingests (`kg_write(..., ensure_edges=True)`, also on `api.kg_write`; ADR-0142). Next: PS-48.
7
+ >
8
+ > **2026-11-05: `rag-wright` 0.17.0 is RELEASED (PR #21: PS-60, PS-61, PS-62).** PS-60 done (TexWright's request: a table over the chunk cap is split between lines with its header repeated, so every row keeps its own span and `TableRow`; ADR-0141). PS-61 done (TexWright's question: the default segmenter `segment_layout` is exported on `pack_sdk`, so a pack can wrap it). PS-62 done (a record table's rows that reach no unit are reported: `DocumentReport.unreached_table_rows` and an `[ingest] warning:` line). Next: PS-48.
7
9
  >
8
10
  > **2026-11-01: `rag-wright` 0.16.1 is RELEASED (PR #20: PS-57, PS-58, PS-59).** PS-57 done (RuleWright's request: a retried contracts-pack write no longer loses a document's clauses; the ArcadeDB conflict budget is configurable, default 20 attempts / 2 s cap; a racing UPSERT's duplicate key is retried). PS-58 done (RuleWright's second request: a `RecordWriter` returns the count that landed). PS-59 done (the store's client keeps keep-alive connections, one session per thread; `requests` declared). Next: PS-48.
9
11
  >
@@ -19,7 +19,7 @@ class _FakeStore:
19
19
  self.calls.append(("read", node_type, kw))
20
20
  return [{"span_id": "doc:0:h#0", "bbox": "[0.1,0.2,0.3,0.4]", "doc_start": 1}]
21
21
 
22
- def kg_write(self, nodes, edges=()):
22
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False):
23
23
  self.calls.append(("write", list(nodes), list(edges)))
24
24
 
25
25
 
@@ -34,7 +34,7 @@ class _FakeStore:
34
34
  def upsert_span(self, record):
35
35
  self.spans[record.span_id] = record
36
36
 
37
- def kg_write(self, nodes, edges=()):
37
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False):
38
38
  self.nodes += list(nodes)
39
39
  self.edges += list(edges)
40
40
 
@@ -0,0 +1,33 @@
1
+ """PS-63 (gap G8): the ingestion default writer asks the store for idempotent edges, and `api.kg_write` passes the
2
+ choice through; a domain `writer=` is untouched."""
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+
7
+ from rag_wright.api import KgEdge, KgNode, kg_write
8
+ from rag_wright.api.workspace import WorkspaceHandle
9
+
10
+ from tests.ingestion.test_write_count import _DOC, _EXTRACTIONS, _stages
11
+
12
+
13
+ class _Store:
14
+ def __init__(self) -> None:
15
+ self.calls: list[dict] = []
16
+
17
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False):
18
+ self.calls.append({"nodes": list(nodes), "edges": list(edges), "ensure_edges": ensure_edges})
19
+
20
+
21
+ def test_the_default_writer_ensures_its_edges(tmp_path):
22
+ store = _Store()
23
+ asyncio.run(_stages(store=store, tmp_path=tmp_path).write(_DOC, _EXTRACTIONS))
24
+ assert [c["ensure_edges"] for c in store.calls] == [True]
25
+
26
+
27
+ def test_api_kg_write_passes_the_choice_through():
28
+ store = _Store()
29
+ ws = WorkspaceHandle(store, None, "t") # type: ignore[arg-type]
30
+ edge = KgEdge("E", "T", "k", "1", "T", "k", "2", {})
31
+ kg_write(ws, [KgNode("T", "k", {"k": "1"})], [edge])
32
+ kg_write(ws, [], [edge], ensure_edges=True)
33
+ assert [c["ensure_edges"] for c in store.calls] == [False, True]
@@ -43,7 +43,7 @@ class _Store:
43
43
  raise RuntimeError("span store unavailable")
44
44
  self.spans[record.span_id] = record
45
45
 
46
- def kg_write(self, nodes, edges=()):
46
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False):
47
47
  self.nodes += list(nodes)
48
48
  self.edges += list(edges)
49
49
 
@@ -32,7 +32,7 @@ def test_a_writer_that_returns_nothing_keeps_the_engine_count(tmp_path):
32
32
 
33
33
  def test_the_default_writer_counts_the_nodes_its_one_transaction_landed(tmp_path):
34
34
  class _Store:
35
- def kg_write(self, nodes, edges=()):
35
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False):
36
36
  self.nodes = list(nodes)
37
37
 
38
38
  store = _Store()
@@ -133,7 +133,7 @@ class _InMemoryStore:
133
133
  return []
134
134
  return []
135
135
 
136
- def kg_write(self, nodes, edges=()): # DD-1b seam conformance: accept the generic typed write (no-op stub)
136
+ def kg_write(self, nodes, edges=(), *, ensure_edges=False): # DD-1b seam conformance: accept the generic typed write (no-op stub)
137
137
  return None
138
138
 
139
139
  def kg_edges(self, from_type=None, *, where=None, key_range=None, direction="out", edge_type=None,
@@ -0,0 +1,142 @@
1
+ """PS-63 (TexWright, 2026-10-15; gap G8): `kg_write(..., ensure_edges=True)` writes an edge only once per (type, from
2
+ node, to node), within one call, across calls and across concurrent writers, with the last properties landing, all
3
+ in the one transaction. The ingestion default writer uses it, so two units emitting the same edge (an entity several
4
+ rows mention) leave one edge, and a re-ingest leaves one too. Without the flag `kg_write` is unchanged: a caller
5
+ whose parallel edges carry their own provenance keeps them."""
6
+ from __future__ import annotations
7
+
8
+ import asyncio
9
+ import concurrent.futures as cf
10
+
11
+ import pytest
12
+
13
+ from rag_wright.store.arcadedb import ArcadeDBStore
14
+ from rag_wright.store.seam import KgEdge, KgNode
15
+
16
+ _DB = "ragwright_test_ps63_ensure_edges"
17
+
18
+
19
+ class _Recorder:
20
+ def __init__(self) -> None:
21
+ self.txns: list[list[str]] = []
22
+
23
+ def execute_transaction(self, statements) -> None:
24
+ self.txns.append(list(statements))
25
+
26
+
27
+ def _store():
28
+ s = object.__new__(ArcadeDBStore)
29
+ s._db = _Recorder() # type: ignore[attr-defined]
30
+ s._property_types = lambda type_name: {} # type: ignore[attr-defined]
31
+ return s
32
+
33
+
34
+ def _edge(to="c1", **props):
35
+ return KgEdge("HasChild", "Parent", "parent_key", "p1", "Child", "child_key", to, props)
36
+
37
+
38
+ def test_an_ensured_edge_is_created_only_if_absent_and_its_props_updated_first():
39
+ s = _store()
40
+ s.kg_write([], [_edge(w=1)], ensure_edges=True)
41
+ (txn,) = s._db.txns
42
+ assert txn == [
43
+ "UPDATE (SELECT FROM (SELECT expand(outE('HasChild')) FROM Parent WHERE parent_key = 'p1')"
44
+ " WHERE inV().child_key = 'c1') SET w = 1",
45
+ "CREATE EDGE HasChild FROM (SELECT FROM Parent WHERE parent_key = 'p1')"
46
+ " TO (SELECT FROM Child WHERE child_key = 'c1') IF NOT EXISTS SET w = 1"]
47
+
48
+
49
+ def test_the_same_edge_twice_in_one_call_is_written_once_with_the_last_props():
50
+ s = _store()
51
+ s.kg_write([], [_edge(w=1), _edge("c2"), _edge(w=2)], ensure_edges=True)
52
+ (txn,) = s._db.txns
53
+ creates = [x for x in txn if x.startswith("CREATE EDGE")]
54
+ assert len(creates) == 2 and creates[0].endswith("SET w = 2") and "'c2'" in creates[1]
55
+
56
+
57
+ def test_an_ensured_edge_without_props_needs_no_update():
58
+ s = _store()
59
+ s.kg_write([], [_edge()], ensure_edges=True)
60
+ assert s._db.txns == [["CREATE EDGE HasChild FROM (SELECT FROM Parent WHERE parent_key = 'p1')"
61
+ " TO (SELECT FROM Child WHERE child_key = 'c1') IF NOT EXISTS"]]
62
+
63
+
64
+ def test_without_the_flag_kg_write_still_creates_every_edge():
65
+ s = _store()
66
+ s.kg_write([], [_edge(w=1), _edge(w=2)])
67
+ (txn,) = s._db.txns
68
+ assert len(txn) == 2 and all(x.startswith("CREATE EDGE") and "IF NOT EXISTS" not in x for x in txn)
69
+
70
+
71
+ # --- live -----------------------------------------------------------------------------------------------------------
72
+
73
+ @pytest.fixture
74
+ def live():
75
+ s = ArcadeDBStore.from_env(database=_DB, reset=True)
76
+ for stmt in ("CREATE VERTEX TYPE Parent", "CREATE PROPERTY Parent.parent_key STRING",
77
+ "CREATE INDEX ON Parent (parent_key) UNIQUE", "CREATE VERTEX TYPE Child",
78
+ "CREATE PROPERTY Child.child_key STRING", "CREATE INDEX ON Child (child_key) UNIQUE",
79
+ "CREATE EDGE TYPE HasChild"):
80
+ s._command(stmt)
81
+ yield s
82
+ s.close()
83
+
84
+
85
+ def _nodes():
86
+ return [KgNode("Parent", "parent_key", {"parent_key": "p1"})] + [
87
+ KgNode("Child", "child_key", {"child_key": f"c{i}"}) for i in (1, 2, 3)]
88
+
89
+
90
+ def _edges(s):
91
+ return sorted((r["c"], r.get("w")) for r in s._query(
92
+ "SELECT inV().child_key AS c, w FROM HasChild"))
93
+
94
+
95
+ @pytest.mark.store
96
+ def test_live_two_units_emitting_one_edge_leave_one_edge_and_a_rewrite_updates_it(live):
97
+ # G8's reproduction: each child on two rows, both rows emit parent -> child; then the document is re-ingested
98
+ live.kg_write(_nodes(), [_edge(f"c{i}", w=1) for i in (1, 2, 3) for _row in (0, 1)], ensure_edges=True)
99
+ assert _edges(live) == [("c1", 1), ("c2", 1), ("c3", 1)]
100
+ live.kg_write(_nodes(), [_edge(f"c{i}", w=2) for i in (1, 2, 3)], ensure_edges=True)
101
+ assert _edges(live) == [("c1", 2), ("c2", 2), ("c3", 2)]
102
+ live.kg_write([], [KgEdge("HasChild", "Child", "child_key", "c1", "Parent", "parent_key", "p1", {})],
103
+ ensure_edges=True) # the reverse direction is a different edge
104
+ assert live._query("SELECT count(*) AS n FROM HasChild")[0]["n"] == 4
105
+
106
+
107
+ @pytest.mark.store
108
+ def test_live_concurrent_writers_of_one_edge_leave_one_edge(live):
109
+ live.kg_write(_nodes())
110
+ with cf.ThreadPoolExecutor(8) as pool:
111
+ list(pool.map(lambda i: live.kg_write([], [_edge(f"c{i % 3 + 1}", w=1)], ensure_edges=True), range(48)))
112
+ assert _edges(live) == [("c1", 1), ("c2", 1), ("c3", 1)]
113
+
114
+
115
+ @pytest.mark.store
116
+ def test_live_without_the_flag_parallel_edges_are_kept(live):
117
+ live.kg_write(_nodes(), [_edge(w=1), _edge(w=2)])
118
+ assert _edges(live) == [("c1", 1), ("c1", 2)]
119
+
120
+
121
+ @pytest.mark.store
122
+ def test_live_the_default_ingestion_writer_leaves_one_edge_per_shared_entity(live, tmp_path):
123
+ from rag_wright.api import IngestSource, UnitExtraction, build_ingestion
124
+ from tests.ingestion.test_builder import _FakeEmbedder
125
+ from tests.ingestion.test_unreached_rows import _sheet
126
+ from rag_wright.api.workspace import WorkspaceHandle
127
+ from rag_wright.api import EngineConfig, StoreConfig
128
+
129
+ live.ensure_schema()
130
+
131
+ async def extract(unit, *, source_doc_id): # every row names the one parent, so every unit emits the one edge
132
+ return UnitExtraction(nodes=_nodes()[:2], edges=[_edge("c1", w=1, span_id=unit.anchor.span_id)])
133
+
134
+ ws = WorkspaceHandle(live, EngineConfig(store=StoreConfig.from_env()), _DB)
135
+ pipe = build_ingestion(extract, embedder=_FakeEmbedder(), progress=lambda _l: None)
136
+ for _run in (1, 2): # an ingest, then a re-ingest
137
+ report = asyncio.run(pipe.aingest(ws, [IngestSource(path=str(_sheet(tmp_path, 6, 3)), doc_id="db",
138
+ table_mode="record")], cache_dir=tmp_path / "cache"))
139
+ (doc,) = report.documents
140
+ assert doc.units == 6 and not doc.extraction_failures and doc.dead_letter is None
141
+ assert _edges(live) == [("c1", 1)]
142
+ assert live._query("SELECT span_id FROM HasChild")[0]["span_id"].endswith("#6") # the last unit's props landed
@@ -3534,7 +3534,7 @@ wheels = [
3534
3534
 
3535
3535
  [[package]]
3536
3536
  name = "rag-wright"
3537
- version = "0.17.0"
3537
+ version = "0.17.1"
3538
3538
  source = { editable = "." }
3539
3539
  dependencies = [
3540
3540
  { name = "arcadedb-python" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.17.0"
3
- }