rag-wright 0.9.0__tar.gz → 0.11.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1069) hide show
  1. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/authoring-a-capability/SKILL.md +16 -4
  2. rag_wright-0.11.0/.claude/skills/building-a-product-backend/SKILL.md +323 -0
  3. rag_wright-0.11.0/.claude/skills/building-a-product-frontend/SKILL.md +271 -0
  4. rag_wright-0.11.0/.claude/skills/building-an-agent-harness/SKILL.md +607 -0
  5. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +36 -1
  6. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/creating-evals/SKILL.md +20 -0
  7. rag_wright-0.11.0/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +223 -0
  8. {rag_wright-0.9.0/src/rag_wright/.agents → rag_wright-0.11.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +37 -16
  9. rag_wright-0.11.0/.release-please-manifest.json +3 -0
  10. {rag_wright-0.9.0 → rag_wright-0.11.0}/CHANGELOG.md +15 -0
  11. {rag_wright-0.9.0 → rag_wright-0.11.0}/CLAUDE.md +8 -1
  12. {rag_wright-0.9.0 → rag_wright-0.11.0}/PKG-INFO +3 -1
  13. rag_wright-0.11.0/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +184 -0
  14. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/api/README.md +27 -3
  15. rag_wright-0.11.0/docs/api/harness.md +309 -0
  16. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/api/pack_sdk.md +0 -16
  17. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/architecture.md +3 -1
  18. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/configuration.md +21 -1
  19. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/README.md +14 -6
  20. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/_engine-gaps.md +15 -2
  21. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/authoring-capabilities.md +12 -6
  22. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/classification-and-decision-models.md +3 -1
  23. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/ontology-authoring.md +18 -0
  24. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/installation.md +4 -2
  25. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/plan.md +5 -1
  26. rag_wright-0.11.0/docs/specs/public-surface/rulewright-migration-0.10.0.md +65 -0
  27. rag_wright-0.11.0/docs/specs/public-surface/rulewright-migration-0.9.0.md +72 -0
  28. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/templates/product-starter/CLAUDE.md.template +17 -11
  29. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/templates/product-starter/README.md +7 -5
  30. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/templates/product-starter/playbook.md.template +10 -6
  31. {rag_wright-0.9.0 → rag_wright-0.11.0}/pyproject.toml +49 -1
  32. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/build_api_docs.py +12 -0
  33. rag_wright-0.11.0/scripts/measure_harness_genericity.py +213 -0
  34. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +16 -4
  35. rag_wright-0.11.0/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +323 -0
  36. rag_wright-0.11.0/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +271 -0
  37. rag_wright-0.11.0/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +607 -0
  38. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +36 -1
  39. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +20 -0
  40. rag_wright-0.11.0/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +223 -0
  41. {rag_wright-0.9.0/.claude → rag_wright-0.11.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +37 -16
  42. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/__init__.py +5 -1
  43. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/agents.py +6 -3
  44. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/tracing.py +6 -2
  45. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/workspace.py +10 -4
  46. rag_wright-0.11.0/src/rag_wright/harness/__init__.py +66 -0
  47. rag_wright-0.11.0/src/rag_wright/harness/accounting.py +80 -0
  48. rag_wright-0.11.0/src/rag_wright/harness/agent.py +146 -0
  49. rag_wright-0.11.0/src/rag_wright/harness/batch.py +115 -0
  50. rag_wright-0.11.0/src/rag_wright/harness/clarify.py +72 -0
  51. rag_wright-0.11.0/src/rag_wright/harness/confirm.py +92 -0
  52. rag_wright-0.11.0/src/rag_wright/harness/decisions.py +534 -0
  53. rag_wright-0.11.0/src/rag_wright/harness/definition.py +109 -0
  54. rag_wright-0.11.0/src/rag_wright/harness/dispatch.py +171 -0
  55. rag_wright-0.11.0/src/rag_wright/harness/errors.py +236 -0
  56. rag_wright-0.11.0/src/rag_wright/harness/events.py +148 -0
  57. rag_wright-0.11.0/src/rag_wright/harness/filesystem.py +184 -0
  58. rag_wright-0.11.0/src/rag_wright/harness/grading.py +568 -0
  59. rag_wright-0.11.0/src/rag_wright/harness/interpreter.py +100 -0
  60. rag_wright-0.11.0/src/rag_wright/harness/memory.py +171 -0
  61. rag_wright-0.11.0/src/rag_wright/harness/models.py +480 -0
  62. rag_wright-0.11.0/src/rag_wright/harness/rules.py +266 -0
  63. rag_wright-0.11.0/src/rag_wright/harness/runs.py +439 -0
  64. rag_wright-0.11.0/src/rag_wright/harness/scope.py +128 -0
  65. rag_wright-0.11.0/src/rag_wright/harness/seen.py +505 -0
  66. rag_wright-0.11.0/src/rag_wright/harness/skills.py +63 -0
  67. rag_wright-0.11.0/src/rag_wright/harness/thinking.py +85 -0
  68. rag_wright-0.11.0/src/rag_wright/harness/tiers.py +344 -0
  69. rag_wright-0.11.0/src/rag_wright/harness/tracing.py +119 -0
  70. rag_wright-0.11.0/src/rag_wright/harness/withhold.py +134 -0
  71. rag_wright-0.11.0/src/rag_wright/harness/workers.py +343 -0
  72. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/seam.py +8 -6
  73. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/tracing.py +12 -0
  74. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/pack_sdk/__init__.py +9 -4
  75. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +3 -3
  76. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +2 -1
  77. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +1 -1
  78. {rag_wright-0.9.0 → rag_wright-0.11.0}/tasks.md +11 -1
  79. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_agent_chat_model.py +10 -0
  80. rag_wright-0.11.0/tests/api/test_api_embedder_ps39.py +31 -0
  81. rag_wright-0.11.0/tests/api/test_tracing_helpers_ps32.py +30 -0
  82. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_api_docs_current.py +8 -0
  83. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_shipped_skills.py +4 -0
  84. rag_wright-0.11.0/tests/harness/test_greenfield_conformance.py +432 -0
  85. rag_wright-0.11.0/tests/harness/test_harness_accounting.py +115 -0
  86. rag_wright-0.11.0/tests/harness/test_harness_engine_wiring.py +94 -0
  87. rag_wright-0.11.0/tests/harness/test_harness_genericity.py +207 -0
  88. rag_wright-0.11.0/tests/harness/test_harness_live.py +48 -0
  89. rag_wright-0.11.0/tests/harness/test_harness_recorder.py +142 -0
  90. rag_wright-0.11.0/tests/harness/test_harness_thinking.py +197 -0
  91. rag_wright-0.11.0/tests/util/__init__.py +0 -0
  92. {rag_wright-0.9.0 → rag_wright-0.11.0}/uv.lock +5 -1
  93. rag_wright-0.9.0/.release-please-manifest.json +0 -3
  94. rag_wright-0.9.0/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -95
  95. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/settings.json +0 -0
  96. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  97. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/laya/SKILL.md +0 -0
  98. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
  99. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  100. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  101. {rag_wright-0.9.0 → rag_wright-0.11.0}/.claude/skills/setfit/SKILL.md +0 -0
  102. {rag_wright-0.9.0 → rag_wright-0.11.0}/.env.example +0 -0
  103. {rag_wright-0.9.0 → rag_wright-0.11.0}/.github/workflows/publish.yml +0 -0
  104. {rag_wright-0.9.0 → rag_wright-0.11.0}/.github/workflows/release-please.yml +0 -0
  105. {rag_wright-0.9.0 → rag_wright-0.11.0}/.gitignore +0 -0
  106. {rag_wright-0.9.0 → rag_wright-0.11.0}/LICENSE +0 -0
  107. {rag_wright-0.9.0 → rag_wright-0.11.0}/README.md +0 -0
  108. {rag_wright-0.9.0 → rag_wright-0.11.0}/SPEC.md +0 -0
  109. {rag_wright-0.9.0 → rag_wright-0.11.0}/conftest.py +0 -0
  110. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  111. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/ArcadeDB_Local.md +0 -0
  112. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/OBSERVABILITY.md +0 -0
  113. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
  114. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
  115. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
  116. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0004-entity-disambiguation.md +0 -0
  117. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0005-relational-golden-set.md +0 -0
  118. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0006-model-profile.md +0 -0
  119. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
  120. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
  121. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
  122. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
  123. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
  124. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
  125. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
  126. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
  127. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
  128. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
  129. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
  130. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
  131. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
  132. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
  133. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
  134. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
  135. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
  136. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
  137. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
  138. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
  139. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
  140. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
  141. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
  142. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
  143. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
  144. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
  145. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
  146. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
  147. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
  148. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
  149. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
  150. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
  151. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
  152. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
  153. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
  154. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
  155. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
  156. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
  157. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
  158. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
  159. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
  160. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
  161. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
  162. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
  163. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
  164. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
  165. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
  166. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
  167. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
  168. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
  169. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0057-async-engine-architecture.md +0 -0
  170. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0058-structure-first-chunking.md +0 -0
  171. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
  172. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
  173. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
  174. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
  175. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
  176. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
  177. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
  178. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
  179. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
  180. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
  181. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
  182. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
  183. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
  184. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
  185. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
  186. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
  187. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
  188. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
  189. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
  190. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
  191. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
  192. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
  193. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
  194. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
  195. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
  196. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
  197. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
  198. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
  199. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
  200. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
  201. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
  202. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
  203. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
  204. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
  205. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
  206. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0094-workspace-document-scope.md +0 -0
  207. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0095-span-page-provenance.md +0 -0
  208. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
  209. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
  210. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
  211. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
  212. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
  213. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
  214. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
  215. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
  216. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
  217. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
  218. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
  219. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
  220. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
  221. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
  222. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
  223. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
  224. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
  225. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
  226. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
  227. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
  228. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
  229. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
  230. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
  231. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
  232. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
  233. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
  234. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
  235. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
  236. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
  237. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
  238. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
  239. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
  240. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
  241. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
  242. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
  243. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
  244. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
  245. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
  246. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
  247. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
  248. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
  249. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
  250. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
  251. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/adr/README.md +0 -0
  252. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
  253. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/README.md +0 -0
  254. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
  255. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
  256. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
  257. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
  258. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
  259. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
  260. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
  261. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
  262. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
  263. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
  264. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
  265. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
  266. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
  267. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
  268. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
  269. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
  270. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
  271. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
  272. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
  273. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
  274. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
  275. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
  276. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
  277. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
  278. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
  279. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
  280. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
  281. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
  282. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
  283. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
  284. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
  285. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
  286. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
  287. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
  288. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
  289. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
  290. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
  291. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
  292. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
  293. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
  294. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
  295. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
  296. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
  297. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
  298. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
  299. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
  300. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
  301. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
  302. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
  303. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
  304. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
  305. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
  306. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
  307. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
  308. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
  309. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
  310. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
  311. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
  312. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
  313. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
  314. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
  315. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/misc/.gitkeep +0 -0
  316. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
  317. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/async-migration.md +0 -0
  318. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/demo_plan.md +0 -0
  319. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
  320. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
  321. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
  322. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
  323. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
  324. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
  325. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/concepts.md +0 -0
  326. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/contract_pipeline_explainer.md +0 -0
  327. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/corpus_ingest_recipe.md +0 -0
  328. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/entity-resolution.md +0 -0
  329. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
  330. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/domain-adaptation/kg-construction.md +0 -0
  331. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/classifier_model_ab.md +0 -0
  332. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/compliance_demo.md +0 -0
  333. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/compliance_gate_cc7.md +0 -0
  334. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/compliance_rung2_cc7.md +0 -0
  335. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
  336. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/dg_model_ab.md +0 -0
  337. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/function_gate_recall.md +0 -0
  338. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
  339. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
  340. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/ocr_benchmark.md +0 -0
  341. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/prod1_readiness.md +0 -0
  342. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/prod2_readiness.md +0 -0
  343. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/query_side_model_ab.md +0 -0
  344. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
  345. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/silver_provider_routing.md +0 -0
  346. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
  347. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/evals.md +0 -0
  348. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/playbook.md +0 -0
  349. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/capability_profiles.md +0 -0
  350. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/contracts_product_roadmap.md +0 -0
  351. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/engine-api-migration-handoff.md +0 -0
  352. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/engine_async_api.md +0 -0
  353. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/new-domain-build-sequence.md +0 -0
  354. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/product/seam-adaptation-guide.md +0 -0
  355. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
  356. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
  357. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/proposals/new-domain-developer-journey.md +0 -0
  358. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/proposals/ontology-induction.md +0 -0
  359. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/quickstart.md +0 -0
  360. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/reference-pack.md +0 -0
  361. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/releasing.md +0 -0
  362. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/engine-platform/SPEC.md +0 -0
  363. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/engine-platform/TASKS.md +0 -0
  364. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/engine-prep/plan.md +0 -0
  365. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/evals/plan.md +0 -0
  366. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
  367. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
  368. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/ingestion-hooks/plan.md +0 -0
  369. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
  370. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
  371. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
  372. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
  373. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
  374. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
  375. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
  376. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
  377. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
  378. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/templates/product-starter/dependabot.yml +0 -0
  379. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
  380. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
  381. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
  382. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
  383. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
  384. {rag_wright-0.9.0 → rag_wright-0.11.0}/docs/workspaces.md +0 -0
  385. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/__init__.py +0 -0
  386. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/acord.py +0 -0
  387. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/acord_retrieval.py +0 -0
  388. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/boundary_residue_gold.py +0 -0
  389. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/build_golden.py +0 -0
  390. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
  391. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
  392. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
  393. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
  394. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/condensed_pipeline.py +0 -0
  395. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/contract_parity_live.py +0 -0
  396. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/contractnli_judge.py +0 -0
  397. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/cuad_highlight.py +0 -0
  398. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/embedded_eval.py +0 -0
  399. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/full_pipeline_rerank.py +0 -0
  400. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/function_ceiling.py +0 -0
  401. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/function_property_rerank.py +0 -0
  402. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/function_rerank.py +0 -0
  403. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/gate1_chunker_ab.py +0 -0
  404. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/gate2_hybrid_rerank.py +0 -0
  405. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/golden/relational/set.json +0 -0
  406. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/golden.py +0 -0
  407. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/ground_discriminator_rerank.py +0 -0
  408. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/harness.py +0 -0
  409. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/ingestion_live_smoke.py +0 -0
  410. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/kg_primary.py +0 -0
  411. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/kg_property_rerank.py +0 -0
  412. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/listwise_rerank.py +0 -0
  413. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/multihop.py +0 -0
  414. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/nl_to_type.py +0 -0
  415. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/relational_eval.py +0 -0
  416. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/residual_decision_gold.py +0 -0
  417. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/segmenter_eval.py +0 -0
  418. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/semantic_judge_gold.py +0 -0
  419. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/test_acord.py +0 -0
  420. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/test_acord_retrieval.py +0 -0
  421. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/test_harness.py +0 -0
  422. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/test_multihop_set.py +0 -0
  423. {rag_wright-0.9.0 → rag_wright-0.11.0}/eval/unit_grouper_eval.py +0 -0
  424. {rag_wright-0.9.0 → rag_wright-0.11.0}/examples/model_server.py +0 -0
  425. {rag_wright-0.9.0 → rag_wright-0.11.0}/examples/quickstart.py +0 -0
  426. {rag_wright-0.9.0 → rag_wright-0.11.0}/plan.md +0 -0
  427. {rag_wright-0.9.0 → rag_wright-0.11.0}/release-please-config.json +0 -0
  428. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ab_model_overlap.py +0 -0
  429. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acord_unify.py +0 -0
  430. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_acord.py +0 -0
  431. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_cuad.py +0 -0
  432. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_ecfr.py +0 -0
  433. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_edgar.py +0 -0
  434. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_ftc_255.py +0 -0
  435. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/acquire_prod1_corpus.py +0 -0
  436. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/audit_reclass_flips.py +0 -0
  437. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/author_leg_a_silver_key.py +0 -0
  438. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/backfill_affiliations.py +0 -0
  439. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/backfill_clause_span_id.py +0 -0
  440. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/backfill_edge_source_doc_id.py +0 -0
  441. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/backup_kg_to_gcs.sh +0 -0
  442. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/bootstrap_template_capture.py +0 -0
  443. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/bootstrap_typed_edges.py +0 -0
  444. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/build_api_docs.sh +0 -0
  445. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/build_cuad_clause_cache.py +0 -0
  446. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/build_function_routing_map.py +0 -0
  447. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_assemble_v2.py +0 -0
  448. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_assemble_v3.py +0 -0
  449. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_generate_hard_negatives.py +0 -0
  450. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_generate_hard_positives.py +0 -0
  451. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_generate_training.py +0 -0
  452. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_hybrid.py +0 -0
  453. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_hybrid2.py +0 -0
  454. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_jev_actor.py +0 -0
  455. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_jev_claimtypes.py +0 -0
  456. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_jev_operative.py +0 -0
  457. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_label_spans.py +0 -0
  458. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_laya_prep.py +0 -0
  459. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_laya_train.py +0 -0
  460. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_prep_operative.py +0 -0
  461. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_relabel_rubric.py +0 -0
  462. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_relabel_rubric2.py +0 -0
  463. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/cic1_train_operative.py +0 -0
  464. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/compare_extraction_models.py +0 -0
  465. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/compliance_actor_gate_smoke.py +0 -0
  466. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/compliance_engine_smoke.py +0 -0
  467. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/compliance_policy_demo.py +0 -0
  468. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/curate_taxonomy_gaps.py +0 -0
  469. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/dg_model_ab.py +0 -0
  470. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
  471. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
  472. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_leg_pool.py +0 -0
  473. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_legs.py +0 -0
  474. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_pool.py +0 -0
  475. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_relstructure.py +0 -0
  476. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/diagnose_acord_retrieval.py +0 -0
  477. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/eval_all.py +0 -0
  478. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/eval_ce.py +0 -0
  479. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/eval_listwise_b.py +0 -0
  480. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/export_ce_dataset.py +0 -0
  481. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/extract_features.py +0 -0
  482. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/listwise_variants.py +0 -0
  483. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/relational_features.py +0 -0
  484. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/train_ce.py +0 -0
  485. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/distill/train_modal.py +0 -0
  486. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/enrich_edgar_candidates.py +0 -0
  487. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/eval_chunking_ab.py +0 -0
  488. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
  489. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/eval_compliance_gold.py +0 -0
  490. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/extract_arcadedb_docs.py +0 -0
  491. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/fetch_reference_models.py +0 -0
  492. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/generate_contract_python.py +0 -0
  493. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/git_post_commit_graphify.sh +0 -0
  494. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/granite_chunker_assess.py +0 -0
  495. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/graph_status.sh +0 -0
  496. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_acord.py +0 -0
  497. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_compliance_async_prod2.py +0 -0
  498. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_compliance_document_prod2.py +0 -0
  499. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_compliance_prod2.py +0 -0
  500. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_cuad.py +0 -0
  501. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_cuad_full.py +0 -0
  502. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_ftc_compliance.py +0 -0
  503. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_prod1.py +0 -0
  504. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_prod1_async.py +0 -0
  505. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ingest_smoke.py +0 -0
  506. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/install_git_hooks.sh +0 -0
  507. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/label_new_functions.py +0 -0
  508. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/legb_function_gate_recall.py +0 -0
  509. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/make_compliance_fixtures.py +0 -0
  510. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/make_compliance_gold.py +0 -0
  511. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/mcp_compliance_agent_demo.py +0 -0
  512. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
  513. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
  514. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/measure_generation_robustness.py +0 -0
  515. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/measure_silver.py +0 -0
  516. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/merge_docs_into_framework.py +0 -0
  517. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
  518. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
  519. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
  520. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/migrate_span_fields.py +0 -0
  521. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/mine_scarce_functions.py +0 -0
  522. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_arcadedb.py +0 -0
  523. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_backfill.py +0 -0
  524. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_exception_linking.py +0 -0
  525. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_gemma4_vllm.py +0 -0
  526. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
  527. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_granite_server.py +0 -0
  528. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_granite_throughput.py +0 -0
  529. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_granite_vllm_server.py +0 -0
  530. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_query_app.py +0 -0
  531. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_qwen3_27b_bench.py +0 -0
  532. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
  533. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_qwen3_vllm_server.py +0 -0
  534. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/modal_stack_a100.py +0 -0
  535. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ocr_benchmark.py +0 -0
  536. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ocr_preprocess.py +0 -0
  537. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/ontology_dimension_check.py +0 -0
  538. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/phase_a_leg_validate.py +0 -0
  539. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/populate_clause_kg.py +0 -0
  540. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/populate_entity_graph.py +0 -0
  541. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/populate_entity_graph_extracted.py +0 -0
  542. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/populate_property_store.py +0 -0
  543. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/prep_relational_verification.py +0 -0
  544. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/publish_manifests.py +0 -0
  545. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/reclassify_kg.py +0 -0
  546. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/refresh_framework_graph.sh +0 -0
  547. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/revert_reclass_flips.py +0 -0
  548. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/run_acord_retrieval.py +0 -0
  549. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/run_clause_exception_linking.py +0 -0
  550. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/semantic_judge_live_validate.py +0 -0
  551. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/semantic_judge_probe.py +0 -0
  552. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/snapshot_leg_a_eval.py +0 -0
  553. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/stack_correctness_validate.py +0 -0
  554. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/table_retrieval_smoke.py +0 -0
  555. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/train_function_classifier.py +0 -0
  556. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/train_legalbert_function.py +0 -0
  557. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/train_legalbert_modal.py +0 -0
  558. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/typed_rerank_validate.py +0 -0
  559. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/verify_wheel_install.sh +0 -0
  560. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/vllm_extraction_ab.py +0 -0
  561. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/vllm_kg_query_validate.py +0 -0
  562. {rag_wright-0.9.0 → rag_wright-0.11.0}/scripts/vllm_raw_diagnostic.py +0 -0
  563. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
  564. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
  565. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
  566. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
  567. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
  568. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
  569. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/__init__.py +0 -0
  570. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/answers.py +0 -0
  571. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/config.py +0 -0
  572. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/discover.py +0 -0
  573. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/documents.py +0 -0
  574. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/ids.py +0 -0
  575. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/invoke.py +0 -0
  576. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/kg.py +0 -0
  577. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/mcp.py +0 -0
  578. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/api/usage.py +0 -0
  579. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/__init__.py +0 -0
  580. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
  581. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/ard.py +0 -0
  582. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
  583. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
  584. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
  585. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/document_parse.py +0 -0
  586. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/document_scope.py +0 -0
  587. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/embedding.py +0 -0
  588. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
  589. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
  590. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/fusion.py +0 -0
  591. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/graph_query.py +0 -0
  592. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
  593. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
  594. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/invoke.py +0 -0
  595. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
  596. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/manifests.py +0 -0
  597. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/parsing.py +0 -0
  598. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/registry.py +0 -0
  599. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
  600. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/reranking.py +0 -0
  601. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
  602. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
  603. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
  604. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
  605. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
  606. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
  607. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
  608. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
  609. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/__init__.py +0 -0
  610. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/chunk.py +0 -0
  611. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/evals.py +0 -0
  612. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/extraction.py +0 -0
  613. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/graph.py +0 -0
  614. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/identifiers.py +0 -0
  615. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/ingestion.py +0 -0
  616. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/provenance.py +0 -0
  617. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/contracts/span.py +0 -0
  618. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/corpus/__init__.py +0 -0
  619. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/corpus/canonicalize.py +0 -0
  620. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/corpus/document_parser.py +0 -0
  621. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/corpus/embedded.py +0 -0
  622. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/corpus/http.py +0 -0
  623. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/evals/__init__.py +0 -0
  624. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/evals/gold.py +0 -0
  625. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
  626. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/evals/runner.py +0 -0
  627. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/evals/scorers.py +0 -0
  628. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/__init__.py +0 -0
  629. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/builder.py +0 -0
  630. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/evaluate.py +0 -0
  631. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/group.py +0 -0
  632. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/layout.py +0 -0
  633. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/segment.py +0 -0
  634. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ingestion/tables.py +0 -0
  635. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/__init__.py +0 -0
  636. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/model_servers.py +0 -0
  637. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/profiles.py +0 -0
  638. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/tag_structured.py +0 -0
  639. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/usage.py +0 -0
  640. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/models/weights.py +0 -0
  641. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ontology/__init__.py +0 -0
  642. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ontology/pack_schema.py +0 -0
  643. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/ontology/registry.py +0 -0
  644. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/__init__.py +0 -0
  645. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
  646. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
  647. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
  648. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
  649. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
  650. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
  651. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
  652. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
  653. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
  654. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
  655. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
  656. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
  657. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
  658. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/pack.py +0 -0
  659. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
  660. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
  661. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
  662. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
  663. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
  664. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
  665. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
  666. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
  667. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
  668. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
  669. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
  670. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
  671. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
  672. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
  673. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
  674. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
  675. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
  676. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
  677. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
  678. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
  679. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
  680. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
  681. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
  682. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
  683. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
  684. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
  685. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
  686. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
  687. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
  688. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
  689. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
  690. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
  691. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
  692. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
  693. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
  694. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
  695. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
  696. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
  697. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
  698. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
  699. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
  700. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
  701. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
  702. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
  703. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
  704. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/options.py +0 -0
  705. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/pack.py +0 -0
  706. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
  707. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
  708. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
  709. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
  710. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
  711. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
  712. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
  713. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
  714. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
  715. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
  716. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
  717. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
  718. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
  719. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
  720. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
  721. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
  722. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
  723. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
  724. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
  725. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
  726. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
  727. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
  728. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
  729. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
  730. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
  731. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
  732. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
  733. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
  734. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
  735. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
  736. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
  737. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
  738. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
  739. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
  740. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
  741. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
  742. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
  743. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
  744. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
  745. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
  746. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
  747. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
  748. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
  749. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
  750. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
  751. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
  752. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
  753. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
  754. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/packs/reference_seam.py +0 -0
  755. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/py.typed +0 -0
  756. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/__init__.py +0 -0
  757. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
  758. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/generation/__init__.py +0 -0
  759. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
  760. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
  761. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/rlm/agent.py +0 -0
  762. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
  763. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
  764. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
  765. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/spans/__init__.py +0 -0
  766. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/spans/page_map.py +0 -0
  767. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/store/__init__.py +0 -0
  768. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/store/arcadedb.py +0 -0
  769. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/store/chunk_text.py +0 -0
  770. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/store/seam.py +0 -0
  771. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/subgraphs/__init__.py +0 -0
  772. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
  773. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/subgraphs/observability.py +0 -0
  774. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
  775. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
  776. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/util/__init__.py +0 -0
  777. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/util/concurrent.py +0 -0
  778. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/util/pdfium.py +0 -0
  779. {rag_wright-0.9.0 → rag_wright-0.11.0}/src/rag_wright/util/spacy_model.py +0 -0
  780. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/__init__.py +0 -0
  781. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/__init__.py +0 -0
  782. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_agent_chat_model_live.py +0 -0
  783. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_answers_exports.py +0 -0
  784. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_bytes_ingest.py +0 -0
  785. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_capability_reexports.py +0 -0
  786. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_decision_swap_doc_example.py +0 -0
  787. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_discover.py +0 -0
  788. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_documents.py +0 -0
  789. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_drop_workspace.py +0 -0
  790. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_drop_workspace_live.py +0 -0
  791. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_e2e.py +0 -0
  792. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_invoke.py +0 -0
  793. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_kg.py +0 -0
  794. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_mcp.py +0 -0
  795. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_metering_tracing_exports.py +0 -0
  796. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_model_role_export.py +0 -0
  797. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_open_workspace_reconfig.py +0 -0
  798. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_options.py +0 -0
  799. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_pack_sdk.py +0 -0
  800. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_pack_store.py +0 -0
  801. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_pdf_page_count.py +0 -0
  802. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_public_gaps_ps38.py +0 -0
  803. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_usage.py +0 -0
  804. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_workspace.py +0 -0
  805. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/api/test_workspace_models.py +0 -0
  806. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
  807. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_doc_references.py +0 -0
  808. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
  809. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_import_contracts.py +0 -0
  810. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_lock_version.py +0 -0
  811. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
  812. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/arch/test_pdfium_door.py +0 -0
  813. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/async_helpers.py +0 -0
  814. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/__init__.py +0 -0
  815. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
  816. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_answer_generator.py +0 -0
  817. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_answer_generator_async.py +0 -0
  818. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_assertion_extraction.py +0 -0
  819. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_authoring_contract.py +0 -0
  820. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_chunk_read.py +0 -0
  821. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_chunk_write.py +0 -0
  822. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
  823. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_claim_extraction.py +0 -0
  824. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
  825. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_compliance_judgment.py +0 -0
  826. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_compliance_store.py +0 -0
  827. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
  828. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_contract_kg_store.py +0 -0
  829. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
  830. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
  831. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_dg_adapter.py +0 -0
  832. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_dg_async.py +0 -0
  833. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_dg_extraction.py +0 -0
  834. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_dg_model_seam.py +0 -0
  835. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_dg_private.py +0 -0
  836. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_disambiguation.py +0 -0
  837. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_document_scope.py +0 -0
  838. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_embedding.py +0 -0
  839. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_embedding_profiles.py +0 -0
  840. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_entity_resolution.py +0 -0
  841. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
  842. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_fusion.py +0 -0
  843. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_graph_extraction.py +0 -0
  844. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_graph_query.py +0 -0
  845. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_graph_storage.py +0 -0
  846. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_highlight_serve.py +0 -0
  847. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_hybrid_search.py +0 -0
  848. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_jev_decision.py +0 -0
  849. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_manifest_validation.py +0 -0
  850. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_manifests.py +0 -0
  851. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_parsing.py +0 -0
  852. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_parties_extraction.py +0 -0
  853. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
  854. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_query_function_classifier.py +0 -0
  855. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_query_understanding.py +0 -0
  856. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_registry.py +0 -0
  857. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_remote_encoders.py +0 -0
  858. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_repair_partition.py +0 -0
  859. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_requirement_extraction.py +0 -0
  860. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_reranking.py +0 -0
  861. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_retrieval_core.py +0 -0
  862. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_rlm_chunking.py +0 -0
  863. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
  864. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_rlm_method.py +0 -0
  865. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
  866. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_runtime_registry.py +0 -0
  867. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_scan_quality.py +0 -0
  868. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
  869. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
  870. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
  871. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
  872. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_tiered_ocr.py +0 -0
  873. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/capabilities/test_vlm_ocr.py +0 -0
  874. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/compliance_fakes.py +0 -0
  875. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/conftest.py +0 -0
  876. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/__init__.py +0 -0
  877. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
  878. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_chunk_record.py +0 -0
  879. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_compliance.py +0 -0
  880. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
  881. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_extraction.py +0 -0
  882. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_function.py +0 -0
  883. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_function_routing.py +0 -0
  884. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_identifiers.py +0 -0
  885. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_ingestion_hooks.py +0 -0
  886. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_jurisdiction.py +0 -0
  887. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_ontology.py +0 -0
  888. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_property.py +0 -0
  889. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_provenance.py +0 -0
  890. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/contracts/test_value_match.py +0 -0
  891. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/__init__.py +0 -0
  892. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/_ooxml_fixtures.py +0 -0
  893. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_canonicalize.py +0 -0
  894. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_cuad.py +0 -0
  895. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_cuad_ingestion.py +0 -0
  896. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_document_parser.py +0 -0
  897. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_edgar.py +0 -0
  898. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_embedded.py +0 -0
  899. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_gcs_ingestion.py +0 -0
  900. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_http.py +0 -0
  901. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_parse_wire2.py +0 -0
  902. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/corpus/test_selection.py +0 -0
  903. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/eval/test_contractnli_judge.py +0 -0
  904. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
  905. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/eval/test_kg_property_rerank.py +0 -0
  906. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
  907. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/eval/test_relational_eval.py +0 -0
  908. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/__init__.py +0 -0
  909. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_gold_contracts.py +0 -0
  910. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_gold_import.py +0 -0
  911. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_langfuse_backend.py +0 -0
  912. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_runner.py +0 -0
  913. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_scorer_parity.py +0 -0
  914. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_scorers_a.py +0 -0
  915. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_scorers_b.py +0 -0
  916. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_scorers_c.py +0 -0
  917. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/evals/test_scorers_d.py +0 -0
  918. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
  919. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
  920. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
  921. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/leg_a_silver/README.md +0 -0
  922. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
  923. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
  924. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/foundation/__init__.py +0 -0
  925. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
  926. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/foundation/test_model_seam_structured.py +0 -0
  927. {rag_wright-0.9.0/tests/ingestion → rag_wright-0.11.0/tests/harness}/__init__.py +0 -0
  928. {rag_wright-0.9.0/tests/mcp → rag_wright-0.11.0/tests/ingestion}/__init__.py +0 -0
  929. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_aevaluate.py +0 -0
  930. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_builder.py +0 -0
  931. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
  932. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
  933. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_document_metadata.py +0 -0
  934. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_evaluate.py +0 -0
  935. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_evaluate_labels.py +0 -0
  936. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_layout_segmenter.py +0 -0
  937. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_sheet_continuations.py +0 -0
  938. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
  939. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_table_rows.py +0 -0
  940. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_tuning.py +0 -0
  941. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_unit_grouper.py +0 -0
  942. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ingestion/test_unit_representative.py +0 -0
  943. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/journey/incidents_domain.py +0 -0
  944. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/journey/incidents_pack.ttl +0 -0
  945. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/journey/test_incidents_journey.py +0 -0
  946. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/journey/test_pack_schema.py +0 -0
  947. {rag_wright-0.9.0/tests/models → rag_wright-0.11.0/tests/mcp}/__init__.py +0 -0
  948. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/mcp/test_compliance_server.py +0 -0
  949. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
  950. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
  951. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/mcp/test_relational_qa_server.py +0 -0
  952. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
  953. {rag_wright-0.9.0/tests/ontology → rag_wright-0.11.0/tests/models}/__init__.py +0 -0
  954. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_async_infra.py +0 -0
  955. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
  956. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_model_servers.py +0 -0
  957. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_models_dir.py +0 -0
  958. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_no_gemma_default.py +0 -0
  959. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_profile_routing.py +0 -0
  960. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_profile_seam.py +0 -0
  961. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_seam_async.py +0 -0
  962. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
  963. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_seam_event_loops.py +0 -0
  964. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_seam_retry.py +0 -0
  965. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_seam_stream.py +0 -0
  966. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_serving_seam.py +0 -0
  967. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_serving_wiring.py +0 -0
  968. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_tag_structured.py +0 -0
  969. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_tag_structured_async.py +0 -0
  970. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_tracing.py +0 -0
  971. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/models/test_usage.py +0 -0
  972. {rag_wright-0.9.0/tests/skills → rag_wright-0.11.0/tests/ontology}/__init__.py +0 -0
  973. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_clause_template.py +0 -0
  974. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
  975. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_derivation.py +0 -0
  976. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_entity_taxonomy.py +0 -0
  977. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
  978. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
  979. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
  980. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
  981. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/reference/test_compliance_reference.py +0 -0
  982. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/reference/test_contract_seam.py +0 -0
  983. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
  984. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
  985. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/scripts/test_fetch_reference_models.py +0 -0
  986. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
  987. {rag_wright-0.9.0/tests/store → rag_wright-0.11.0/tests/skills}/__init__.py +0 -0
  988. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
  989. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/skills/test_ingestion_skill_example.py +0 -0
  990. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_boundary.py +0 -0
  991. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_classifier_property_extractor.py +0 -0
  992. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
  993. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_clause_function_classifier.py +0 -0
  994. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
  995. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_clause_kg_extractor.py +0 -0
  996. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
  997. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_dim_classifier.py +0 -0
  998. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_dim_fleet_live.py +0 -0
  999. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_function_classifier.py +0 -0
  1000. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_hybrid_classifier.py +0 -0
  1001. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
  1002. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_legalbert_classifier.py +0 -0
  1003. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_model_capabilities.py +0 -0
  1004. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_new_function_labels.py +0 -0
  1005. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_page_map.py +0 -0
  1006. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_property_extractor.py +0 -0
  1007. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_property_grounding.py +0 -0
  1008. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_reclassify.py +0 -0
  1009. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_residual_decision.py +0 -0
  1010. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_scarce_function_labels.py +0 -0
  1011. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_segment.py +0 -0
  1012. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_segmentation_vocab.py +0 -0
  1013. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_semantic_judge.py +0 -0
  1014. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
  1015. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_setfit_probabilities.py +0 -0
  1016. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_span_offsets.py +0 -0
  1017. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_stage_labels_0005.py +0 -0
  1018. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_symbolic_validation.py +0 -0
  1019. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/spans/test_tag_clause_extractor.py +0 -0
  1020. {rag_wright-0.9.0/tests/subgraphs → rag_wright-0.11.0/tests/store}/__init__.py +0 -0
  1021. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_affiliation_backfill.py +0 -0
  1022. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
  1023. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_contract.py +0 -0
  1024. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_property.py +0 -0
  1025. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
  1026. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_schema.py +0 -0
  1027. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_arcadedb_span.py +0 -0
  1028. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_chunk_text.py +0 -0
  1029. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_concurrent_writes.py +0 -0
  1030. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_contract_kg_store_live.py +0 -0
  1031. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_document_metadata_live.py +0 -0
  1032. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_document_scope.py +0 -0
  1033. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_engine_domain_neutral.py +0 -0
  1034. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_entities_by_name.py +0 -0
  1035. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_kg_edges.py +0 -0
  1036. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_kg_mutations.py +0 -0
  1037. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_kg_read.py +0 -0
  1038. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_kg_write.py +0 -0
  1039. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_neutral_schema.py +0 -0
  1040. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_store_create_flag.py +0 -0
  1041. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/store/test_write_graph_idempotent.py +0 -0
  1042. {rag_wright-0.9.0/tests/util → rag_wright-0.11.0/tests/subgraphs}/__init__.py +0 -0
  1043. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_async_ingestion.py +0 -0
  1044. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
  1045. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_clause_results.py +0 -0
  1046. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_compliance_check.py +0 -0
  1047. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
  1048. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
  1049. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
  1050. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
  1051. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_graph_extraction.py +0 -0
  1052. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
  1053. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
  1054. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
  1055. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_observability.py +0 -0
  1056. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
  1057. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
  1058. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_relational_qa.py +0 -0
  1059. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
  1060. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_scaffold.py +0 -0
  1061. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
  1062. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
  1063. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
  1064. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/test_backfill_clause_span_id.py +0 -0
  1065. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/test_dg_model_ab.py +0 -0
  1066. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/test_populate_clause_kg.py +0 -0
  1067. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/test_populate_entity_graph.py +0 -0
  1068. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/util/test_concurrent.py +0 -0
  1069. {rag_wright-0.9.0 → rag_wright-0.11.0}/tests/util/test_spacy_model.py +0 -0
@@ -28,6 +28,13 @@ authoring surface from `rag_wright.api`: `CapabilityManifest`, `register_capabil
28
28
  `engine_capabilities`, `register_canonical_slugs`, `canonical_capability_slugs`, `load_reference_pack`,
29
29
  `reference_pack` (the same objects as in `capabilities/manifests.py` and `capabilities/registry.py`).
30
30
 
31
+ **In a product** (the usual case for a new domain): your capabilities live in your own pack package, for example
32
+ `src/<product>/pack/subgraphs/<slug>.py` and `src/<product>/pack/capabilities/<slug>.py`, with a
33
+ `src/<product>/pack/__init__.py` exposing `register()`; everything below applies unchanged, with your pack module in
34
+ place of the engine's `packs/...` paths. Name your slugs with your product's prefix (`<product>_<capability>`), so they
35
+ can never collide with the engine's or the reference pack's. If your subgraph imports `langgraph` directly, declare it
36
+ in your own dependencies (`uv add langgraph`): a transitive dependency of the engine is not yours to rely on.
37
+
31
38
  ## The four surfaces (the definition of done)
32
39
 
33
40
  A finished capability touches these: 1 (implementation) is for EVERY kind; 2 (the invoke factory + `impl_ref`) is
@@ -39,8 +46,8 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
39
46
  `async def ainvoke(resources, inputs)` (subgraph) / `def <name>(resources, inputs)` (model) in the capability's
40
47
  own module. A subgraph factory builds over the opaque `WorkspaceHandle`, never env: its store access with
41
48
  `pack_store(resources, YourStore)` (your pack's store extension over the workspace's store) and its models with
42
- `resources.model_id(role)`; its query embedder with `workspace_embedder(resources)` (`rag_wright.pack_sdk`, built
43
- from the workspace's embedding profile) and its options with `resources.config`; a model factory is
49
+ `resources.model_id(role)`; its query embedder with `resources.embedder` (or `workspace_embedder(resources)`, its
50
+ `rag_wright.pack_sdk` twin; built from the workspace's embedding profile) and its options with `resources.config`; a model factory is
44
51
  store-independent and ignores `resources`. A builder that takes the store as a keyword goes through `pack_store`
45
52
  too: `pack_store(resources, lambda store: production_x(store=store, ...))`. The handle's underscored attributes
46
53
  are engine-internal; the reference pack's factories show the public form. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
@@ -71,6 +78,10 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
71
78
  kind that invoker serves (`KeyError` / `ValueError` otherwise), then imports the `impl_ref` via
72
79
  `capabilities.invoke.capability_impl` — AND exposable over MCP (surface 4b), with **zero engine edits**.
73
80
 
81
+ 5. **The eval, written first** (`creating-evals`): the capability's executable acceptance, run through the
82
+ capability layer (`ainvoke_subgraph` / `ainvoke_model`), so it measures what production runs. A capability without
83
+ one is not done.
84
+
74
85
  4b. **MCP exposure** (optional) — any invokable capability is already an MCP tool with zero extra code via
75
86
  `api/mcp.py::build_capability_mcp(slug, resources=ws)` (EP-RT-2). Write a bespoke FastMCP server only
76
87
  when you want a CURATED, typed tool signature instead of the generic opaque-`inputs` surface.
@@ -109,8 +120,9 @@ MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is opt
109
120
  `packs/compliance/skills/compliance_judgment/SKILL.md`) + the agent runtime (e.g. `skills/rlm/`). It is LOADED (progressive
110
121
  disclosure), not called: no `ResponseBounds`. Declare `requires=(...)` for a closure over other skills and
111
122
  `skill_runtime` (`SkillRuntime`, from `rag_wright.pack_sdk`) for its intrinsic runtime.
112
- - A product's agent (a Deep Agents harness) is not a capability kind yet: an `agent` kind is a later engine workstream
113
- (PS-33, engine ADR-0139). Build agents in the product, on `agent_chat_model` for their model.
123
+ - A product's agent is not a capability kind yet (an `agent` kind is a later engine workstream, PS-33). Build it on the
124
+ engine's harness tier, `rag_wright.harness` (an `AgentDefinition` run with `start_run` / `resume_run`; the
125
+ `building-an-agent-harness` skill); its tools call your capabilities by name, through your operations.
114
126
 
115
127
  ### mcp_tool — a capability exposed over MCP
116
128
  - A distinct ARD identity (`<slug>_mcp`) for the same underlying capability exposed as a cross-agent MCP tool.
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: building-a-product-backend
3
+ description: The architecture of a product backend over a retrieval engine - the four units and the one dependency law, the placement test for every new operation, the operation layer that gives a route and an agent one implementation, tenancy that cannot be forgotten, jobs as a queue of items, and the guards that make each of these fail loudly instead of drifting. Load at the START of a new product's backend and before adding any route, operation, table or engine call. Pairs with building-a-product-frontend and building-an-agent-harness.
4
+ ---
5
+
6
+ # Building a product backend over an engine
7
+
8
+ Repository paths in this skill (`docs/`, `src/`) are in the engine repository: read them there or on GitHub, at the tag matching your installed engine.
9
+
10
+ > **This skill was distilled from a shipped backend and is written for a DIFFERENT product.** It ships in the
11
+ > engine wheel; link it into your repo's `.claude/skills/` (`docs/installation.md`).
12
+ >
13
+ > **Every rule below was paid for**, and the measurements are kept because they are why anybody follows the
14
+ > rule. Its two companions cover the other surfaces: `building-a-product-frontend` and
15
+ > `building-an-agent-harness`.
16
+ >
17
+ > **The one sentence.** Your backend is not thin HTTP over engine calls. It is where **product policy**
18
+ > lives, and almost every decision below is about making sure that policy has exactly one home and cannot
19
+ > be re-derived, forgotten or bypassed.
20
+
21
+ ## Four units, one dependency law
22
+
23
+ | unit | owns |
24
+ |---|---|
25
+ | **engine** | capabilities, the ontology machinery, the generic ingestion and query primitives, the capability registry |
26
+ | **agent harness** | the loop, memory, delegation, interrupts, deadlines, run grading: the engine's `rag_wright.harness` tier |
27
+ | **UI core** | shell, workspaces, users, roles, the chat surface, the table and state primitives |
28
+ | **product** | your domain pack (`.ttl` + capabilities), the routes for your deterministic use cases, the operations behind them, the agent's definition (tools, workers, prompts, rules) |
29
+
30
+ **Product -> Harness -> Engine, and Product -> Engine. Never upward.** The engine and its harness tier enforce
31
+ their half with import contracts; your half is a boundary test in your repo: product code imports only
32
+ `rag_wright.api`, `rag_wright.pack_sdk` (pack code) and `rag_wright.harness` (agent code).
33
+
34
+ **Fix the UI core / product boundary inside your repo on day one**, so a later split is a move rather than an
35
+ untangling. The failure mode is "keep it in mind as a requirement": in the product this comes from, zero of
36
+ seventeen architecture decisions governed the front end, its conventions lived in recall, and it drifted. **A
37
+ convention is only enforced when violating it fails loudly.**
38
+
39
+ ## Where your domain's pipelines live: your pack, on the engine's primitives
40
+
41
+ The engine is domain-neutral. It ships three kinds of thing, and a new domain uses each differently:
42
+
43
+ | kind | examples | what you do |
44
+ |---|---|---|
45
+ | **mechanism** | the store, model profiles, tracing, encoders, the registry, document parsing | use it as is |
46
+ | **generic primitives** | `build_ingestion` and its hooks, hybrid search, graph query, answer generation, span judging, the decision model | compose them |
47
+ | **the reference pack** | a contract-ingestion pipeline, a compliance check | read it as a worked example; never your domain |
48
+
49
+ **Your domain's composites are your pack's capabilities.** An ingestion pipeline for your documents is
50
+ `build_ingestion` plus your extractor and hooks; a query workflow is your capability composing the engine's
51
+ primitives; both are registered with the engine (`register_capability`, `load_pack`) so a route, an agent and
52
+ an eval all invoke them by name. The `authoring-a-capability` and `building-an-ingestion-capability` skills
53
+ carry the how.
54
+
55
+ **Do not re-implement a primitive, and do not reach past the public tiers for one.** The measured reason: a
56
+ domain pipeline that imported 21 engine internals broke at runtime, on a customer's corpus, when the engine
57
+ removed ONE of them, while the product's suite reported 644 passed, 1 failed (a monkeypatch test). Through the
58
+ public tiers that change is a named diff in your surface snapshot instead.
59
+
60
+ **When a primitive does not fit, that is an engine request, not a fork.** Write it in your
61
+ `docs/engine-requests/` with the evidence, and meanwhile drop to the next primitive down in your own
62
+ capability; never copy engine code into the product.
63
+
64
+ **IP exposure is a packaging question, not a placement one.** A domain workflow that must stay proprietary is
65
+ your closed pack, depending on the open engine; it never needs the engine to know about it.
66
+
67
+ ## The placement test, for every new user operation
68
+
69
+ > **Product policy -> product. Use-case shape -> engine.**
70
+ >
71
+ > - Does it depend on **tenancy, roles, workspace selection, billing, or a UI or agent affordance**?
72
+ > **Product.**
73
+ > - Is it domain knowledge or a domain pipeline (vocabulary, schema, extraction, a typed query)? **Your
74
+ > pack**: the `.ttl` plus capabilities registered with the engine, invoked by name.
75
+ > - Would any product of any domain reuse it unchanged, and does no public primitive cover it? **An engine
76
+ > request.**
77
+
78
+ **Tenancy is the sharpest discriminator.** The engine owns the mechanism (a store, a document filter); the
79
+ product supplies the values (which store, and which documents this workspace selected).
80
+
81
+ Apply it in both directions and trust the answer. Grading, coverage, corpus-wide sweeps, export and named
82
+ conditions all stayed in the product here, because **what counts as a match is a product judgement** and
83
+ burying it in the seam would have made it unreviewable. Same test, opposite answer, and it was right.
84
+
85
+ ## The operation layer: one implementation, two callers
86
+
87
+ **This is the most important decision in this skill.** You have two drivers - a click and an agent turn -
88
+ and they must be the same code.
89
+
90
+ | layer | holds |
91
+ |---|---|
92
+ | `workflows/` (primitives) | `grade`, `coverage`, `search`, `correct`, `export_*`. **Pure, tenancy-free, unit-testable.** |
93
+ | **`operations/`** | **composition and policy.** One function per user operation, taking a tenant and scope context, returning a typed result. |
94
+ | `api/routes/` | **HTTP only.** Parse, call the operation, serialize, status codes. |
95
+
96
+ **The route calls the operation. The agent's tool IS the same operation.** Identical output by construction
97
+ rather than by discipline.
98
+
99
+ **The measurement that forces it.** One route here was 76 lines composing SIX steps: canonicalise the inputs,
100
+ run the search against the tenant's graph, **grade** the results against product policy, resolve display
101
+ names scoped to the customer, compute **coverage over what was SUBMITTED rather than what retrieval
102
+ returned**, and assemble. An agent calling the underlying primitive would get raw results and have to
103
+ re-derive four of those - so **the same question would return a different answer depending on whether the
104
+ user clicked or typed, and the chat answer would be the one with no grading policy behind it.**
105
+
106
+ **Enforce it:** a route module may not import the primitives. It reaches them only through an operation.
107
+ That one import rule is what makes the layer real.
108
+
109
+ **Make the operations a registry, and prove the two callers agree.** Give each operation an id, a version, typed
110
+ parameters (with the sources of their dropdown values), a result shape and whether it writes; the UI's menu and the
111
+ agent's tool surface are both built from it. Then a **parity test** invokes each read-only operation both ways (the
112
+ route, the agent's tool) on fixed data and asserts identical results, and a second test asserts no operation that
113
+ writes is on the agent's tool surface unless the spec says so: a store write reached from chat is a write no person
114
+ confirmed.
115
+
116
+ ## The API is the product, so make the claim CHECKABLE
117
+
118
+ Saying "the API is the product" changes nothing. Two ratchets do:
119
+
120
+ 1. **Every table has a route.** A data model with no way to reach it is a feature that does not exist.
121
+ 2. **Every route in the published schema is named by at least one test**, with an **empty** exemption map and
122
+ exact equality.
123
+
124
+ **Write the second one carefully, because the first draft of ours was vacuous.** It scanned every test file
125
+ including itself, and its own docstring named the one untested route - so it passed on exactly the broken
126
+ surface it was built to catch. **A guard satisfiable by its own prose proves nothing.** Exclude the guard's
127
+ own file, and prove it with an **assembled** sentinel path so the file's text cannot satisfy its own scan.
128
+
129
+ Fixed, it immediately found a second untested route. And the untested route it was written for had been
130
+ returning **500 on every real request for five tasks of green suites**: the pieces either side had fifteen
131
+ tests and three tests respectively. **What nobody tested was the wiring between them**, which is all a
132
+ handler is.
133
+
134
+ ## Tenancy you cannot forget
135
+
136
+ **Derive the per-customer store name; never store one.** A pure function of the tenancy key. Ids are unique,
137
+ so two customers cannot produce one name, and there is **no stored value to go stale, be copied between
138
+ environments, or be left empty**. Route every resolution through **one choke point**.
139
+
140
+ **If you support a per-customer override, make the column UNIQUE.** Then two customers pointing at one store
141
+ is impossible rather than unlikely. (And any test that sets such an override must release it on teardown, or
142
+ the next run fails on the constraint rather than on anything it was testing.)
143
+
144
+ **Deny by default, as a database fact.** Membership is a row in a link table and its absence is a refusal.
145
+ Give it a **composite primary key** so "one membership per user per workspace" is enforced by the database
146
+ rather than by an `if not already_a_member` somebody has to remember.
147
+
148
+ ### The corpus belongs to the CUSTOMER; a workspace is a SELECTION over it
149
+
150
+ Ingestion puts an item in the customer's corpus **once**. Membership in a workspace is a separate
151
+ many-to-many fact: one item may be selected into several workspaces.
152
+
153
+ (A single-tenant product with one shared corpus still benefits from the selection model the day a second
154
+ team or project arrives; if you defer it, record the decision.)
155
+
156
+ **This is the decision a new product most often gets wrong**, by attaching documents to a workspace directly.
157
+ Get it right and re-use costs nothing, scoping is one join, and "the same document in two workspaces" is not a
158
+ duplicate ingest.
159
+
160
+ ### Resolve the scope INSIDE the operation, never take it as an argument
161
+
162
+ The operation asks the store which items this workspace may search and passes that list into every query. A
163
+ caller that forgot would query the whole customer's corpus **with nothing on screen to say so**.
164
+
165
+ **And short-circuit an empty selection before touching the engine.** This is a correctness fix, not an
166
+ optimisation: found by opening the page in a browser, a workspace with nothing ingested returned **HTTP
167
+ 500**, because the first thing a graph traversal touches is a type that a database nobody has ingested into
168
+ does not have. So the **first thing a new customer sees** failed with "Internal Server Error". Short-circuit
169
+ in the product rather than catching the engine's error: an empty selection is a legitimate state you already
170
+ know about, and swallowing a store exception would also hide a genuinely broken store.
171
+
172
+ **No route may take a client-supplied handle without scoping it**, and the durable half is a guard that
173
+ proves the *next* route will too. A test that two routes call the check is worth much less than a test that
174
+ every route must.
175
+
176
+ ## Jobs: product-owned, and the unit of queuing is ONE ITEM
177
+
178
+ The product owns the job lifecycle end to end: the record, its status, stage, counts and tenancy.
179
+
180
+ **A bulk operation is not one row.** Make it a **parent** coordinator row that processes nothing and holds
181
+ the batch outcome, plus **N child** rows, each carrying one item's storage key and a foreign key back to the
182
+ parent. One row per batch cannot be resumed, cannot report per-item progress, and cannot be retried
183
+ selectively.
184
+
185
+ **A lost item is its VERDICT, not its job status.** Define one predicate - with a SQL twin so the API and the
186
+ database agree - for "this item was lost": the job failed, **or** the work's own verdict says it failed.
187
+ **A partial result is not a loss**, and that boundary belongs to the engine's own outcome type: a partially
188
+ ingested item is written and can be queried, it simply lost some extractions, and calling it a failure offers
189
+ a retry that re-ingests something already in the graph.
190
+
191
+ **Lease fields go in typed columns**, because the queue filters and orders on them.
192
+
193
+ ## The data model: typed columns for the spine, JSONB for the volatile
194
+
195
+ Decide per field with a stated test rather than by taste. **A typed column** if any of these holds: the store
196
+ **filters, orders, joins or aggregates** on it; it must be **constrained** (not-null, unique, a foreign key, a
197
+ bounded set). **JSONB** for the rest - payloads, reports, volatile nested shapes.
198
+
199
+ **Then walk the metadata in a test**, so the principle cannot be violated accidentally. A principle nobody
200
+ *can* break beats one everybody has to remember.
201
+
202
+ ### Two schemas, one database, one owner each
203
+
204
+ If a framework creates its own tables (a checkpointer, a queue, a cache), **give it its own schema**.
205
+
206
+ The failure otherwise is severe and quiet: your migration autogenerator walks your models, finds tables in
207
+ its schema with no model behind them, and writes a `drop_table` for each. A routine migration then **deletes
208
+ every suspended run**. In a separate schema they are simply not reflected.
209
+
210
+ ## Identity: two paths, one session
211
+
212
+ Federated sign-in and password sign-in converge on **one server-side, revocable session record**, with a
213
+ token in an HttpOnly cookie. Two paths, one session, one revocation story.
214
+
215
+ - **A signup records an ATTEMPT; confirming the emailed token is what provisions the account.** Hold the
216
+ pending signup with an already-hashed password and its own hashed, single-use, short-lived token.
217
+ - **Consume every single-use token atomically**: one `UPDATE ... WHERE used_at IS NULL RETURNING`. Not a read
218
+ then a write.
219
+ - **A federated callback that reads an email and issues a session IS an account-takeover primitive** unless
220
+ something asserts the person owns that address. The provider's verified-email claim is the only thing that
221
+ does. Gate linking on it.
222
+
223
+ **Uploads go client-to-storage through a signed URL.** The API issues the URL and handles control traffic
224
+ only; bytes never pass through your process. It removes a whole class of timeout, memory and size problems
225
+ before they exist.
226
+
227
+ ## Policy stays in the product, even when the engine could hold it
228
+
229
+ The pattern to copy: **the engine reports the FACT, the product decides the GROUPING.** The engine judges
230
+ each result against a condition and returns a verdict with a rationale and a confidence; the product decides
231
+ which verdicts count as matched, possible or not-found, and what that means for the user.
232
+
233
+ Keep it in the product and it is reviewable, testable and changeable per product. Bury it in the seam and
234
+ nobody can see what the number meant.
235
+
236
+ **Related: do not cache what the layer below already caches correctly.** Read the engine's caching before
237
+ adding yours. A second cache is a second answer to one question, which is the failure the single-home rule
238
+ above exists to prevent.
239
+
240
+ ## The seam, and reaching for an internal honestly
241
+
242
+ One module is the engine's door. Import the engine's **public API** and nothing deeper; assert it with a
243
+ boundary test.
244
+
245
+ When you genuinely need something the public tiers do not carry yet, **write the engine request** and keep
246
+ your interim on the public surface (a coarser primitive, a product-side composition), recorded with the
247
+ request it waits on, and a ratchet that **fails the moment the engine publishes it**. Then adoption is a
248
+ *deletion* - drop the fallback, drop the line - rather than something to remember. Never import an engine
249
+ internal to bridge the gap. Also snapshot the engine's public surface (`rag_wright.api.__all__`, and the
250
+ `pack_sdk` and `harness` tiers you use) so drift is a named diff rather than a mystery failure three layers
251
+ into a call site.
252
+
253
+ **And a moved engine is normal.** Guard the thing that can reach you - the published surface - not the
254
+ commit. A guard that fires on every unrelated release is a guard people learn to ignore.
255
+
256
+ ## Testing a product over an engine
257
+
258
+ **Put a LIVE test on every engine seam.** Fakes prove your mapping; only a live run proves the integration.
259
+ The measurement: of four defects in one seam task, **three were invisible to unit tests**, and the worst - a
260
+ model of the wrong type passed where another was required - failed as an **opaque error inside the engine's
261
+ own guard**, so the fast suite stayed green while the integration was broken.
262
+
263
+ **Keep the expensive markers out of the default run, and then actually run them.** Three tests here sat
264
+ broken across three tasks because a retrieval signature changed while the default suite - which deselects
265
+ the database-marked tests - kept reporting green. **Run the database-marked suite before committing anything
266
+ that touches a route, a shared fixture or the seam.**
267
+
268
+ **Separate "needs a database" from "spends money".** Tests carrying both markers perform real ingests and
269
+ spend real credits on every run. Exclude the paying ones by default and run them deliberately.
270
+
271
+ **Salt a live ingest fixture.** Fixed bytes pin a live test to a stale artefact from a previous engine
272
+ version, which here cost three wrong conclusions in one day.
273
+
274
+ **And never run the browser suite against the same database as the integration suite.** There is one queue:
275
+ the browser harness starts a real worker, the worker claims the integration tests' jobs, and three of them
276
+ fail with the correct code in front of you.
277
+
278
+ ## Build order
279
+
280
+ 1. **The relational store and the migration tool**, with the schema split decided up front.
281
+ 2. **The data-model guard** that walks your metadata. It is cheap now and an audit later.
282
+ 3. **Identity and the session**, both paths, with the single-use token consumed atomically.
283
+ 4. **Tenancy**: the derived name, the one choke point, membership deny-by-default.
284
+ 5. **The seam**, the public-surface snapshot and the boundary test.
285
+ 6. **The customer corpus and the workspace-as-selection tables.** Before any ingest.
286
+ 7. **Jobs**: parent and child rows, leases in typed columns, the lost-item predicate.
287
+ 8. **Uploads via signed URLs.**
288
+ 9. **One operation end to end** - primitive, operation, route - and the import rule that keeps routes out of
289
+ the primitives.
290
+ 10. **The two API ratchets**, each proved by planting its violation.
291
+ 11. **A live seam test**, before you trust any of the above.
292
+ 12. **Then the rest of the operations.** The shape is set and each one is cheap.
293
+
294
+ ## What goes in your project's own child skill
295
+
296
+ - your placement-test decisions, by operation, with the answer and the reason
297
+ - your seam's interim list and the engine gaps each waits on
298
+ - the commands: migrations, the marked suites, the live seam test, provisioning an account
299
+ - the defects that recurred in **your** backend, with the evidence for each
300
+ - which policy decisions are deliberately the product's, so nobody "simplifies" one into the seam
301
+
302
+ ## Verification checklist
303
+
304
+ - [ ] Product code imports the engine only through `rag_wright.api`, `rag_wright.pack_sdk` and `rag_wright.harness` (tested)
305
+ - [ ] No route module imports a primitive; it reaches them through an operation (tested)
306
+ - [ ] Each read-only operation returns the same result from the route and from the agent's tool (a parity test)
307
+ - [ ] No store-writing operation is on the agent's tool surface unless the spec says so (tested)
308
+ - [ ] Every table is reachable by a route (tested)
309
+ - [ ] Every route in the published schema is named by a test, exemption map EMPTY, and the guard excludes
310
+ its own file
311
+ - [ ] The per-customer store name is derived, not stored, and resolved in one place
312
+ - [ ] Any per-customer override column is UNIQUE
313
+ - [ ] Membership absence is a refusal, with a composite primary key behind it
314
+ - [ ] Every operation resolves its own scope and short-circuits an empty selection before the engine
315
+ - [ ] No route accepts a client-supplied handle without scoping it (tested for ALL routes, not two)
316
+ - [ ] Single-use tokens are consumed by one atomic statement
317
+ - [ ] Federated linking is gated on a verified-email claim
318
+ - [ ] Every field is in a typed column or JSONB by the stated test, and a guard walks the metadata
319
+ - [ ] Any framework-owned tables live in their own schema
320
+ - [ ] A partial result is not reported as a loss
321
+ - [ ] Every engine seam has a LIVE test
322
+ - [ ] The database-marked suite was run before committing a route, fixture or seam change
323
+ - [ ] Every new guard was proved by planting its violation and watching it fail
@@ -0,0 +1,271 @@
1
+ ---
2
+ name: building-a-product-frontend
3
+ description: The architecture and build ORDER for a product front end over a retrieval/agent engine - the core/product seam, generating the API client from the schema, the URL as state of record, one data-access layer, and the three test tiers in the order you need them. Load at the START of a new product's UI, and before changing the shape of an existing one. Craft (composition, a11y, states) is frontend-ui-engineering, which still applies.
4
+ ---
5
+
6
+ # Building a product front end over an engine
7
+
8
+ Repository paths in this skill (`docs/`, `src/`) are in the engine repository: read them there or on GitHub, at the tag matching your installed engine.
9
+
10
+ > **This skill was distilled from a shipped product and is written for a DIFFERENT one.** It ships in the
11
+ > engine wheel; link it into your repo's `.claude/skills/` (`docs/installation.md`). Its companion craft skill,
12
+ > `frontend-ui-engineering`, is one of the shared way-of-working skills. The agent surface it ends with is built
13
+ > on the engine's `rag_wright.harness` tier (`building-an-agent-harness`).
14
+ >
15
+ > **It is PRODUCT-AGNOSTIC on purpose, and every number in it is measured.** Each decision below was paid
16
+ > for once, by shipping; the measurements are kept because they are why anybody follows the rule. What is
17
+ > specific to a single codebase -- its locked choices, its primitives, its paths -- belongs in a
18
+ > project-scoped child skill of your own, never in this file. The last section says what to put there.
19
+ >
20
+ > **It is the ARCHITECTURE skill, not the craft skill.** `frontend-ui-engineering` covers composition,
21
+ > accessibility, spacing, states, and the ways UI defects hide from a green suite. Load both. Where that
22
+ > skill already says something, this one points at it rather than repeating it.
23
+
24
+ ## The shape every one of these products has
25
+
26
+ A front end over a document-retrieval-plus-agent engine is, every time, the same six things:
27
+
28
+ 1. **Identity**: password and federated sign-in, one session, email verification, password reset.
29
+ 2. **Tenancy**: an account, workspaces inside it, membership and roles, deny-by-default authorization.
30
+ 3. **A corpus**: upload, ingestion progress, a library of what has been ingested, a per-item detail view
31
+ with the source rendered and its extracted records beside it.
32
+ 4. **Deterministic operations**: menu-driven, parameterised, reached by a click. Each returns a result that
33
+ cites its evidence.
34
+ 5. **An agent surface**: chat that can pick up from a deterministic result, ask for more, take feedback, and
35
+ answer open questions.
36
+ 6. **Housekeeping**: settings, members, usage and spend.
37
+
38
+ **What changes between products is the entities and the operations. The structure around them does not.**
39
+ That is why this skill exists, and it is also the exact limit of what can be shared: see the seam below.
40
+
41
+ ## Decision 1: two directories, and the dependency arrow points one way
42
+
43
+ ```
44
+ src/core/ knows NOTHING about the domain. Shell, layout, tables, auth pages, theme,
45
+ data-access plumbing, settings. The thing you carry to the NEXT product.
46
+ src/product/ the domain. Entity names, the operation surfaces, the copy, the registries.
47
+ ```
48
+
49
+ **The core reads registries the product populates.** Navigation is the first one: the product declares its
50
+ surfaces (path, label, icon, which ones appear in nav) and the shell renders whatever it is given. The core
51
+ never imports from the product; the product imports from the core.
52
+
53
+ **Enforce it with a scan, not with intent.** A test that greps the core directory for the domain's own words
54
+ -- comments and docstrings included -- and fails on any hit. Two properties make it work:
55
+
56
+ - **Comments count.** A core component commented "this is where the invoice total goes" is coupled; the next
57
+ person writes code to match the comment.
58
+ - **Strip paths and references before scanning**, or a legitimate pointer to a domain document trips it and
59
+ somebody adds an exemption, and then the exemption list is the guard.
60
+
61
+ Write this test with the second directory, on the first day. Retrofitting it means auditing everything.
62
+
63
+ ### The seam is a discipline, NOT a framework
64
+
65
+ **Do not build a plugin loader, dynamic module registration, a theming engine, or config-driven forms.**
66
+ Adaptation is **import-then-customize**: the next product copies or depends on the core, declares its own
67
+ registries, and writes its own result surfaces.
68
+
69
+ This is the most tempting decision to get wrong, so here is the reason in full. A result surface looks
70
+ generic -- read a parameter from the URL, run a query, render loading/error/empty, group the rows, cite each
71
+ one. Most of it is. But a small number of branches in those pages encode **domain truths, not layout**:
72
+
73
+ - *"Not found is not the same as none."* An unrecognised name must not render like a clean, empty result:
74
+ one says "we have nothing on this", the other says "you are exposed to nothing", and only one of them is
75
+ true. A typo must never read as an all-clear.
76
+ - *"These two groups must never be merged."* A parent organisation and its subsidiary are different parties;
77
+ pooling their records into one total misstates who is responsible for what. The separation is a fact about
78
+ the world, enforced in the rendering.
79
+
80
+ A configuration schema has two options for a rule like that. It cannot express it -- and the generated page
81
+ is plausible, well laid out, and wrong, which is the most expensive kind of wrong in a product people make
82
+ decisions from. Or it can express it, and the configuration is now a programming language with no type
83
+ checker, no tests and no reviewer. **Generalise the shell, the plumbing and the primitives; write the result
84
+ surfaces.** They are the cheapest part and the part that carries the meaning.
85
+
86
+ ## Decision 2: GENERATE the API client from the schema
87
+
88
+ If the backend publishes a machine-readable schema -- and a modern Python or TypeScript backend does, for
89
+ free -- **the client is generated, never hand-mirrored.**
90
+
91
+ Measured, on the product this skill comes from: a hand-written client reached **1,154 lines, 87 exports and
92
+ 24 endpoint string literals**, and its own header comment admitted the schema was the real source of truth
93
+ "if they ever drift". They had already drifted: a comment two-thirds down recorded that the field names
94
+ there had gone stale behind the backend **twice**.
95
+
96
+ The discipline that makes generation work in practice:
97
+
98
+ - **Commit the generated file.** A diff in a pull request is how a breaking backend change becomes visible
99
+ instead of a runtime surprise.
100
+ - **Regenerate in CI and fail on a dirty tree.** Otherwise the generated file is a hand-written file with
101
+ extra steps.
102
+ - **Hand-write only the thin layer above it**: auth headers, error normalisation, the query-key factory.
103
+ - **Change the client type in the SAME commit as the backend type.** A field that became optional while the
104
+ client still types it as required is a dereference that survives a full green suite and a clean build.
105
+
106
+ ## Decision 3: the URL is the state of record
107
+
108
+ Page, filters, sort, selection, which panel is open, which tab is active -- all of it in the URL, none of it
109
+ in component state.
110
+
111
+ Three reasons, and the third is the one people forget: it is shareable, the back button is correct by
112
+ construction, and **an agent can hand the user a link to what it just did**. In a product where a chat turn
113
+ and a click are both first-class ways to reach a surface, state the agent cannot address is state the agent
114
+ cannot hand back.
115
+
116
+ **Write the guard when the first consumer lands.** Deferring it is reasonable while there is nothing to
117
+ guard; what fails is the deferral with a named trigger that nobody checks. If you defer, write the trigger
118
+ down where the next person will look, not only in the ticket.
119
+
120
+ ## Decision 4: one data-access layer, two guards
121
+
122
+ A query-key factory is the only place keys are built; no component calls `fetch` directly. Both guards are a
123
+ source scan, both take minutes, and both are provable by planting their violation:
124
+
125
+ - no inline key array outside the factory
126
+ - no `fetch(` in a component
127
+
128
+ A library's own `refetch()` goes *through* the layer and is the opposite of a violation -- make sure the
129
+ guard knows the difference, or it will be disabled by the first person it annoys.
130
+
131
+ ## Decision 5: one table primitive, and the allow-list that must not grow
132
+
133
+ Build the table once, and allow a raw `<table>` element in exactly that one file. Everything else that needs
134
+ a table uses the primitive; if the primitive cannot do it, extend the primitive.
135
+
136
+ **Adding a file to the allow-list without it BEING the primitive is how a rule becomes an exemption list.**
137
+ The guard should make that edit conspicuous: one line, in a file whose name says what it is for.
138
+
139
+ Make pagination props optional. An unpaginated listing that renders "N rows" is better than a pager over a
140
+ single page -- and see the arithmetic warning below before you let a page size anywhere near a count.
141
+
142
+ ## The three test tiers, and the ORDER is the lesson
143
+
144
+ | tier | answers | structurally blind to |
145
+ |---|---|---|
146
+ | **unit / jsdom** | does this component behave? | **anything visual -- jsdom computes no CSS** |
147
+ | **browser, against the BUILT artifact** | does what we already know to check still hold? | anything nobody thought to assert |
148
+ | **a person or agent looking at it** | **what did nobody think to check?** | regressions -- it runs once |
149
+
150
+ `frontend-ui-engineering` has the detail on what each tier cannot see and how to pick between them. What
151
+ belongs here is the **sequencing**, because this is the thing a new product gets wrong:
152
+
153
+ **Stand up the browser tier before your second surface, not after your ninth.** Adopted late, it arrives as
154
+ a backlog of surfaces nobody has ever watched render -- and the first run finds defects on all of them at
155
+ once, in a batch too large to attribute to the change that caused each one. Measured on the product this
156
+ comes from: once the discovery tier existed, it found a real defect on **every single surface built**, and
157
+ the majority were invisible to every automated tier in the repo -- an invisible sign-in button, a duplicated
158
+ main landmark, every control under the minimum hit area, a document rendered at a third of its intended
159
+ size, two adjacent controls reading as one, a content region narrower than the panel beside it, and a white
160
+ screen on a page whose component tests were entirely green.
161
+
162
+ **The browser tier runs against the production build**, not the dev server. The server harness for it:
163
+
164
+ - its **own** database, created and migrated for the run -- never the development database
165
+ - the test account provisioned through the **real** provisioning command, so the path under test is the path
166
+ users take
167
+ - a **build**, then serve the build the way production serves it
168
+ - **rebuild on every run**, or a planted source change never reaches the browser and a guard you are proving
169
+ cannot fail
170
+ - **kill any hand-started dev server first.** A harness that reuses an existing server will serve a stale
171
+ build, and the fix you just made appears to fail
172
+
173
+ Two traps worth naming in advance: a production build does **not** double-invoke effects, so anything that
174
+ only manifests under development-mode strict rendering belongs in the jsdom tier and could never fail in the
175
+ browser; and an accessibility sweep over *mocked* pages never renders the real shell, which is how nested
176
+ landmarks survive indefinitely.
177
+
178
+ **Drive the browser by element reference. Never by screen coordinates.** Locator-first frameworks make the
179
+ mistake inexpressible; a browser-automation plugin will happily take a pixel, and nothing but this rule
180
+ stops you. A stale reference is the signal to re-read the page, never to reach for coordinates. And after a
181
+ click that navigates or submits, wait and confirm before the next step -- racing a sign-in request with a
182
+ navigation makes a route guard bounce it, which looks exactly like broken authentication.
183
+
184
+ **Anything the discovery tier finds becomes a browser test in the same change.** A finding left as an
185
+ anecdote is a defect that comes back; the repeated pattern is a human finding the same fault three times
186
+ because no run of it ever became an assertion.
187
+
188
+ ## Rules that each cost a real defect, in portable form
189
+
190
+ **A feature ends at the surface.** A backend change whose UI lands "next task" does not land. Ship the
191
+ surface in the same commit, and check what neighbouring commits touched before calling a task done. A
192
+ structural guard helps -- a new table with no route fails -- but nothing enforces "and a person can reach
193
+ it" except looking.
194
+
195
+ **A failed load must never render as an empty result.** "You have none" and "we could not read what you
196
+ have" are different claims, and in a product people act on, one of them is a false assurance. Same shape
197
+ everywhere: "no results" versus "no such record"; "not retained" versus "retention expired".
198
+
199
+ **Every data surface defines loading, empty AND error.** Guard it by scanning for the three states, and make
200
+ any exemption a written line in the file that says why -- a surface addressed by an id has no "no results"
201
+ case. A silent exemption is how "every data surface" becomes "most of them".
202
+
203
+ **A page size is a presentation choice and must never become an arithmetic one.** A list capped at 100
204
+ feeding a coverage numerator reports "100 of 100 processed" for a 500-item job. If a number means coverage,
205
+ it comes from the count, never from the page.
206
+
207
+ **Never present text the user did not write as theirs.** An assembled excerpt shown under "in your document"
208
+ attributes words to somebody in an order they never used. If the backend labels which spans are verbatim and
209
+ which are reconstructed, read the label instead of guessing, and never invent a filename for pasted input.
210
+
211
+ **Hit areas: measure them, do not eyeball them.** Every control in the product this comes from was under the
212
+ minimum until one was measured in a real browser. A text input is its own target and cannot borrow an
213
+ adjacent button's padding.
214
+
215
+ **A list the UI owns is a capability the UI will silently lack**, and **any guard with a hand-maintained list
216
+ goes stale silently**. Both are in `frontend-ui-engineering` with the mechanics; they are listed here because
217
+ they bite hardest in exactly this kind of product, where the backend's capability set grows every week.
218
+
219
+ ## The build order for a new product
220
+
221
+ Doing these out of order is what costs the rework:
222
+
223
+ 1. **Scaffold, then the seam.** Two directories and the vocabulary scan over the core, before the second
224
+ component exists.
225
+ 2. **Generate the client.** Before any surface. Everything downstream types against it.
226
+ 3. **The data-access layer and its two guards.** Cheap now, an audit later.
227
+ 4. **Identity and tenancy surfaces.** They are the most portable code you will write and they exercise the
228
+ shell, routing and the session end to end.
229
+ 5. **The shell: regions, navigation registry, theme tokens.** Resist centring the content region if a detail
230
+ panel will ever sit beside it -- then make each surface constrain its own measure, and assert it.
231
+ 6. **The table primitive**, with its allow-list guard, before the second listing.
232
+ 7. **The browser-tier harness** -- own database, real provisioning, build, serve, rebuild per run.
233
+ 8. **The first corpus surface** (upload, progress, library, detail). This is where ingestion contracts get
234
+ real.
235
+ 9. **One deterministic operation end to end**, with citations, through all three tiers. Look at it in a
236
+ browser before calling it done.
237
+ 10. **Then the rest of the operations.** By now the shape is set and each one is cheap.
238
+ 11. **The agent surface last**, because it needs the operations to exist and the URL state to be addressable.
239
+
240
+ ## What goes in your project's own child skill
241
+
242
+ This skill carries what is true of any product of this shape. Put in the project-scoped child the things a
243
+ reader cannot derive:
244
+
245
+ - your locked decisions, with what a violation looks like, and the fact that changing one needs a recorded
246
+ decision rather than a judgement call
247
+ - your primitives, by path: the table, the shell, the query-key factory, the states helper
248
+ - the commands: how to run each tier, where specs live, what the e2e server script does
249
+ - the defects that have actually recurred in **your** codebase, with the evidence that makes them stick
250
+ - current debts: a guard that was deferred, a decision made but not yet built
251
+
252
+ Keep that file in front of the person *before* they write code, not in review. A decision recorded only in
253
+ an architecture document is a decision that gets violated with the document already in place.
254
+
255
+ ## Verification checklist
256
+
257
+ - [ ] The core directory has a vocabulary scan over it, comments included, and it passes
258
+ - [ ] Nothing in the core imports from the product
259
+ - [ ] The API client is generated from the published schema, committed, and regenerated in CI
260
+ - [ ] Any client type mirroring a backend contract changed in the SAME commit as the backend
261
+ - [ ] Navigation-shaped state is in the URL, not component state
262
+ - [ ] Reads go through the query-key factory; no `fetch(` in a component
263
+ - [ ] No raw table outside the primitive; the allow-list did not grow
264
+ - [ ] Every data surface has loading, empty and error, or a written exemption saying why
265
+ - [ ] A failed load renders as a failure, never as an empty result
266
+ - [ ] Anything visual is asserted in a browser against the BUILT artifact, not in jsdom
267
+ - [ ] The guard for whatever changed was proved by planting its violation and watching it fail
268
+ - [ ] A new or substantially changed surface was OPENED and looked at, and anything found became a browser
269
+ test in the same change
270
+ - [ ] No screen-coordinate interaction anywhere in the change or its tests
271
+ - [ ] The backend change this belongs to ships its surface in the same commit