rag-wright 0.7.0__tar.gz → 0.8.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.
- {rag_wright-0.7.0/src/rag_wright/.agents → rag_wright-0.8.0/.claude}/skills/building-an-ingestion-capability/SKILL.md +5 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/creating-evals/SKILL.md +112 -36
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/SKILL.md +24 -12
- {rag_wright-0.7.0/src/rag_wright/.agents → rag_wright-0.8.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +20 -2
- rag_wright-0.8.0/.release-please-manifest.json +3 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/CHANGELOG.md +24 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/CLAUDE.md +12 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/PKG-INFO +4 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/README.md +2 -0
- rag_wright-0.8.0/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +39 -0
- rag_wright-0.8.0/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +29 -0
- rag_wright-0.8.0/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +38 -0
- rag_wright-0.8.0/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +34 -0
- rag_wright-0.8.0/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +39 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/README.md +8 -3
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/api/README.md +112 -6
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/api/pack_sdk.md +3 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/configuration.md +7 -3
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/README.md +3 -2
- rag_wright-0.8.0/docs/domain-adaptation/evals-from-expert-files.md +46 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/kg-construction.md +34 -1
- rag_wright-0.8.0/docs/evals.md +51 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/installation.md +2 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/playbook.md +6 -6
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/releasing.md +1 -1
- rag_wright-0.8.0/docs/specs/evals/plan.md +118 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/plan.md +8 -0
- rag_wright-0.8.0/docs/specs/public-surface/rulewright-migration-0.8.0.md +62 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/CLAUDE.md.template +3 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/README.md +1 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/playbook.md.template +5 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/workspaces.md +5 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/condensed_pipeline.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/contract_parity_live.py +2 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/cuad_highlight.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/full_pipeline_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_ceiling.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_property_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/function_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/ground_discriminator_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/kg_primary.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/kg_property_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/listwise_rerank.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/relational_eval.py +14 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/residual_decision_gold.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/pyproject.toml +4 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/release-please-config.json +4 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/measure_generation_robustness.py +24 -13
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/refresh_framework_graph.sh +1 -1
- {rag_wright-0.7.0/.claude → rag_wright-0.8.0/src/rag_wright/.agents}/skills/building-an-ingestion-capability/SKILL.md +5 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +112 -36
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +24 -12
- {rag_wright-0.7.0/.claude → rag_wright-0.8.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +20 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/__init__.py +13 -4
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/documents.py +14 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/workspace.py +7 -4
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/answer_generator.py +25 -10
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/document_parse.py +17 -7
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/parsing.py +18 -15
- rag_wright-0.8.0/src/rag_wright/capabilities/sheet_tables.py +174 -0
- rag_wright-0.8.0/src/rag_wright/contracts/evals.py +140 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/document_parser.py +7 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/embedded.py +24 -30
- rag_wright-0.8.0/src/rag_wright/evals/__init__.py +11 -0
- rag_wright-0.8.0/src/rag_wright/evals/gold.py +219 -0
- rag_wright-0.8.0/src/rag_wright/evals/langfuse_backend.py +109 -0
- rag_wright-0.8.0/src/rag_wright/evals/runner.py +139 -0
- rag_wright-0.8.0/src/rag_wright/evals/scorers.py +477 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/__init__.py +2 -2
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/evaluate.py +104 -30
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/seam.py +52 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/tracing.py +19 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +1 -1
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/generation/SKILL.md +7 -6
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/arcadedb.py +19 -6
- rag_wright-0.8.0/src/rag_wright/util/pdfium.py +58 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tasks.md +11 -4
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_open_workspace_reconfig.py +1 -1
- rag_wright-0.8.0/tests/api/test_pdf_page_count.py +42 -0
- rag_wright-0.8.0/tests/arch/test_lock_version.py +30 -0
- rag_wright-0.8.0/tests/arch/test_pdfium_door.py +80 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_shipped_skills.py +21 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_answer_generator.py +39 -0
- rag_wright-0.8.0/tests/evals/test_gold_contracts.py +87 -0
- rag_wright-0.8.0/tests/evals/test_gold_import.py +146 -0
- rag_wright-0.8.0/tests/evals/test_langfuse_backend.py +165 -0
- rag_wright-0.8.0/tests/evals/test_runner.py +124 -0
- rag_wright-0.8.0/tests/evals/test_scorer_parity.py +311 -0
- rag_wright-0.8.0/tests/evals/test_scorers_a.py +116 -0
- rag_wright-0.8.0/tests/evals/test_scorers_b.py +82 -0
- rag_wright-0.8.0/tests/evals/test_scorers_c.py +101 -0
- rag_wright-0.8.0/tests/evals/test_scorers_d.py +96 -0
- rag_wright-0.8.0/tests/ingestion/test_aevaluate.py +105 -0
- rag_wright-0.8.0/tests/ingestion/test_sheet_continuations.py +143 -0
- rag_wright-0.8.0/tests/models/test_seam_event_loops.py +84 -0
- rag_wright-0.8.0/tests/scripts/test_generation_robustness_errors.py +17 -0
- rag_wright-0.8.0/tests/skills/test_creating_evals_skill_example.py +57 -0
- rag_wright-0.8.0/tests/store/test_store_create_flag.py +121 -0
- rag_wright-0.8.0/tests/util/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/uv.lock +3 -1
- rag_wright-0.7.0/.release-please-manifest.json +0 -3
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/settings.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.env.example +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/.gitignore +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/LICENSE +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/SPEC.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/conftest.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/architecture.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/README.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/concepts.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/quickstart.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/reference-pack.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/acord.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/build_golden.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/embedded_eval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/golden.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/harness.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/multihop.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/nl_to_type.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_acord.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_harness.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/examples/model_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/examples/quickstart.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/plan.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acord_unify.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/graph_status.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/measure_silver.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/builder.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/store/seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_discover.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_documents.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_options.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_usage.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/async_helpers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/conftest.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.7.0/tests/foundation → rag_wright-0.8.0/tests/evals}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.7.0/tests/ingestion → rag_wright-0.8.0/tests/foundation}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.7.0/tests/mcp → rag_wright-0.8.0/tests/ingestion}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.7.0/tests/models → rag_wright-0.8.0/tests/mcp}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.7.0/tests/ontology → rag_wright-0.8.0/tests/models}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/models/test_usage.py +0 -0
- {rag_wright-0.7.0/tests/skills → rag_wright-0.8.0/tests/ontology}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.7.0/tests/store → rag_wright-0.8.0/tests/skills}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.7.0/tests/subgraphs → rag_wright-0.8.0/tests/store}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.7.0/tests/util → rag_wright-0.8.0/tests/subgraphs}/__init__.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.7.0 → rag_wright-0.8.0}/tests/util/test_spacy_model.py +0 -0
|
@@ -136,6 +136,11 @@ network-bound work inside it; the engine runs up to `IngestionTuning.extract_con
|
|
|
136
136
|
|
|
137
137
|
- **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
|
|
138
138
|
`DocumentReport.skipped_hidden_sheets`).
|
|
139
|
+
- **Blank rows inside a table**: the parse cuts a sheet's table at every blank row; the engine glues a piece back
|
|
140
|
+
onto the table above when its first row is data (its number or date columns agree, or it is formatted like the
|
|
141
|
+
data rather than the header), so no record is read as a header. A text-only table with no formatting cannot be
|
|
142
|
+
decided from the file: it stays apart and `evaluate_ingestion` lists it in `warnings` (format the header row, or
|
|
143
|
+
remove the blank rows).
|
|
139
144
|
- **Exact cell values**: `table_rows(parse_document(...))` returns every data row as a `TableRow` (`columns`,
|
|
140
145
|
`values`, `cell(name)`), read from the parse's cell grid, whole even when chunking split the table. A per-row unit
|
|
141
146
|
carries its row in `Unit.table_row`, so the extractor reads cells, not re-parsed text.
|
|
@@ -6,8 +6,10 @@ description: >-
|
|
|
6
6
|
starting a new domain (right after capabilities are defined), when adding or changing a capability, or when A/B-ing
|
|
7
7
|
alternatives (e.g. a trained classifier vs a System-1 decision model). Covers gold-set design + reliability,
|
|
8
8
|
per-capability-KIND metrics (extraction / classification / retrieval / graph / generation / judgment), the
|
|
9
|
-
gate-vs-diagnostic split, building the gold cheaply,
|
|
10
|
-
|
|
9
|
+
gate-vs-diagnostic split, building the gold cheaply, and running it with the engine's eval toolkit
|
|
10
|
+
(`load_gold_set` from an expert's own files, one `score_*` per kind, `arun_eval` with repeats and errors kept apart,
|
|
11
|
+
an `EvalReport` a backend can return, optional Langfuse datasets and runs). An eval is the executable acceptance
|
|
12
|
+
criterion; training data IS an eval.
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
# Creating evals (eval-first / TDD)
|
|
@@ -19,6 +21,13 @@ can A/B alternatives and catch regressions forever. Corollary observed repeatedl
|
|
|
19
21
|
data you build for a classifier/decision model IS an eval** (a labeled gold set + a metric) — so building the eval
|
|
20
22
|
first also gives you the data design for free.
|
|
21
23
|
|
|
24
|
+
**The toolkit (on `rag_wright.api`).** `load_gold_set` turns an expert's CSV / XLSX / JSONL into a `GoldSet`;
|
|
25
|
+
one scorer per capability kind (section 2) turns predictions into a `ScorerResult` (the gate, its thresholds,
|
|
26
|
+
diagnostics that are never gated); `arun_eval` runs your capability over the gold set (concurrently, `[eval] i/N`
|
|
27
|
+
progress, repeats, a failed call kept as an error) and returns an `EvalReport` -- JSON-ready, every item's outputs
|
|
28
|
+
kept, so `rescore_eval` can score it again later without calling anything. Use it rather than hand-writing a
|
|
29
|
+
harness; section 6 is a complete example.
|
|
30
|
+
|
|
22
31
|
Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`) are in the engine repository: read them there or on GitHub, at the tag matching your installed engine. The `eval/` and `scripts/` files named as patterns are the engine's own evals: read them as
|
|
23
32
|
worked examples; your evals live in your repo.
|
|
24
33
|
|
|
@@ -50,12 +59,30 @@ worked examples; your evals live in your repo.
|
|
|
50
59
|
- **Separate a tuning set from a held-out set.** Label the held-out set BEFORE any prompt runs on it, tune only on
|
|
51
60
|
the tuning set, and report both numbers (ADR-0122 boundary residue prompt: 94.5% held-out vs 96.2% tuning). A
|
|
52
61
|
number measured only on the set you tuned on is not a result.
|
|
62
|
+
- **Gold from your experts' own files.** Domain experts label in spreadsheets: `load_gold_set(path_or_upload,
|
|
63
|
+
GoldMapping(id=..., input=..., expected=..., group=...), name=..., version=...)` reads them as written -- the header
|
|
64
|
+
found under a title, blank rows skipped, values kept exactly, each item's place recorded -- and refuses anything
|
|
65
|
+
that would make the gold wrong (a missing column, a row without its id, a duplicate id) with where it is. Map
|
|
66
|
+
`group` to the source document so splits stay leakage-safe. A gold set is `local_only` by default: client data
|
|
67
|
+
never leaves the machine.
|
|
53
68
|
- **Gold stays local when the corpus is restrictively licensed** (CUAD/ACORD-derived gold lives under the
|
|
54
69
|
gitignored `data/eval/`); commit the builder and the scorer, never the data.
|
|
55
70
|
|
|
56
71
|
## 2. Pick the metric by capability KIND, and split GATE vs DIAGNOSTIC
|
|
57
72
|
Always set ONE pass/fail **gate** (from the acceptance criterion) and report **diagnostics** alongside (never gate
|
|
58
|
-
on a diagnostic).
|
|
73
|
+
on a diagnostic). Each kind has its scorer on `rag_wright.api`, checked against the engine evals named below:
|
|
74
|
+
|
|
75
|
+
| kind | scorer | gate |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| classification / typed decision | `score_classification` | the weakest class's recall@k (+ top-1 accuracy via `top1_floor`) |
|
|
78
|
+
| retrieval | `score_retrieval` | mean recall@k at a relevance grade; nDCG reported |
|
|
79
|
+
| extraction | `score_extraction` | recall and precision, apart |
|
|
80
|
+
| judgment / verdict | `score_judgment` | precision and recall of the actionable verdict |
|
|
81
|
+
| generation / QA | `score_generation` | citation recall, correct abstention, groundedness |
|
|
82
|
+
| graph / relational | `score_relational` | recall over the answer set |
|
|
83
|
+
| ingestion structure / unit labelling | `score_ingestion` | `evaluate_ingestion`'s checks (+ label accuracy) |
|
|
84
|
+
| candidate-then-choose | `score_candidate_choice` | candidate coverage, value-level recall and precision |
|
|
85
|
+
|
|
59
86
|
- **Extraction** (section → records, clauses, requirements): recall / precision / F1 of extracted items vs gold,
|
|
60
87
|
reported SEPARATELY (under- vs over-extraction are different failures). Watch over-extraction on non-operative
|
|
61
88
|
input (definitions) and under-extraction on long input.
|
|
@@ -84,7 +111,7 @@ on a diagnostic).
|
|
|
84
111
|
scores mean what they say), not one accuracy number. Pattern: `eval/semantic_judge_gold.py` (ING-9: decision
|
|
85
112
|
model 95.3% vs LLM 90.1% on 192 blind hand-labelled cases).
|
|
86
113
|
- **Candidate-then-choose pipelines** (a generator proposes, a model picks): measure the generator's **coverage**
|
|
87
|
-
separately, because it caps recall (ING-9b residual values: candidate coverage
|
|
114
|
+
separately, because it caps recall (ING-9b residual values: candidate coverage 0.93, 188/203 recomputed from the saved outputs; value-level recall 0.83 /
|
|
88
115
|
precision 0.88 vs the LLM's 0.60 / 0.79. Pattern: `eval/residual_decision_gold.py`). **Count is not accuracy**:
|
|
89
116
|
emitting more values is not a win without precision.
|
|
90
117
|
- **Ingestion structure**: `evaluate_ingestion` (in `rag_wright.api`) is the packaged structural eval of the
|
|
@@ -111,42 +138,87 @@ on a diagnostic).
|
|
|
111
138
|
- **Generate hard cases** (near-boundary positives/negatives) to stress the exact confusions — TRAIN-ONLY; the
|
|
112
139
|
gold test stays real. (Full data playbook: the `setfit` skill Phase 1/4 + `classifier-opportunity-analysis`.)
|
|
113
140
|
|
|
114
|
-
## 4.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
`eval
|
|
141
|
+
## 4. Run it: `arun_eval`
|
|
142
|
+
`arun_eval(gold, task, scorers, *, repeats, concurrency, progress)` is the harness. It runs `task` (your coroutine,
|
|
143
|
+
or a plain function, which runs off the event loop) on every item, `repeats` times, `concurrency` at a time, streams
|
|
144
|
+
`[eval] i/N` lines to `progress`, keeps a call that raises as an ERROR in that item's slot (never dropped, never an
|
|
145
|
+
answer), scores each repeat, and passes a scorer only if it passes on every repeat (its gate is the worst repeat;
|
|
146
|
+
`per_repeat_gate` lists each). `run_eval` is the synchronous form; inside a web backend, await `arun_eval` as a
|
|
147
|
+
background job. What is still yours:
|
|
148
|
+
- **Isolate the capability under test**: the task calls ONE capability, injected (a seam / `extract_override` / an
|
|
149
|
+
injected `retrieve`), so the eval measures it, not the whole pipeline. Invoke production code THROUGH the
|
|
150
|
+
capability layer (`ainvoke_subgraph`/`ainvoke_model`), never a hand-built copy. Score the **shipped request** (the
|
|
151
|
+
exact prompt/question builder production uses, e.g. `judge_request`), not a copy of it re-typed in the eval.
|
|
152
|
+
- **Repeatability for non-deterministic models.** Use `repeats` and read `report.flips`; flips cluster near the
|
|
153
|
+
threshold and usually mean the QUESTION is ambiguous: fix the question, do not vote it away (Jev flipped 5/181
|
|
154
|
+
answers at scores 0.47-0.56; temperature/seed did not help, majority voting barely helped, rewriting the ambiguous
|
|
155
|
+
question did. The ADR-0122 boundary residue prompt went from 94-96% with flips to 460/461, zero flips across 3
|
|
156
|
+
calls). Pattern: `eval/boundary_residue_gold.py`.
|
|
125
157
|
- **Cache keys include the prompt and the method.** Any decision or extraction cache must key on the prompt text
|
|
126
158
|
and the method (decision model vs LLM, and which model), so an eval never reuses outputs a different prompt or
|
|
127
159
|
method produced (ADR-0122 ING-4d / ADR-0040 ING-9b: the residue decision cache and the clause cache).
|
|
128
|
-
- **
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- **Env-selected** so the SAME harness runs local (dev) or on Modal (full corpus + GPU).
|
|
160
|
+
- **Keep the report.** `report.model_dump_json()` holds every item's outputs; save it next to the gold version.
|
|
161
|
+
`rescore_eval(report, gold, scorers)` re-scores it with new thresholds, a new scorer or a corrected gold, free. An
|
|
162
|
+
eval kept only as aggregate numbers can never be checked again.
|
|
132
163
|
- **Pre-flight paid bulk** (>~50 paid calls): print the exact count + cost and wait (`warn-before-bulk` rule).
|
|
133
|
-
- Stream `X/N` progress + actively monitor any run over ~30s (never launch-and-forget).
|
|
134
164
|
- **Hermetic tests never touch the network**: `tests/conftest.py` fails a test that resolves a non-local host unless
|
|
135
|
-
it carries a live marker (`model`, `store`, ...). Live evals run as
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
## 5. Langfuse
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
165
|
+
it carries a live marker (`model`, `store`, ...). Live evals run as scripts (outside pytest) or carry a live
|
|
166
|
+
marker.
|
|
167
|
+
|
|
168
|
+
## 5. Langfuse -- optional: datasets, runs and scores next to the traces
|
|
169
|
+
`arun_eval(..., langfuse=True)` (or `RAG_EVAL_BACKEND=langfuse`; the keys alone send nothing) runs the same eval on
|
|
170
|
+
Langfuse: the gold set becomes a dataset (items upserted; items no longer in the gold set archived; the version is
|
|
171
|
+
the server's latest timestamp, recorded as `report.dataset_version`), each repeat a dataset run (`report.run_urls`),
|
|
172
|
+
and each scorer's gates and pass/fail are pushed as run scores. The report is the same, scored locally from the same
|
|
173
|
+
outputs. With engine tracing on (`RAG_TRACE_LEVEL`), every model call the task makes nests under its item's trace,
|
|
174
|
+
on both backends. What was verified against Langfuse 4.15.1 (self-hosted), and what to know:
|
|
175
|
+
- **`local_only` is refused before anything is sent.** Only a self-hosted Langfuse should ever receive client data;
|
|
176
|
+
set `local_only=False` only for data that may leave the machine.
|
|
177
|
+
- **Scoring runs in your process**, not in Langfuse: its code evaluators are a 2-second, standard-library sandbox
|
|
178
|
+
with no network, so they cannot run your scorers.
|
|
179
|
+
- **The SDK's own `run_experiment` drops an item whose task raises, and blocks a running event loop**; `arun_eval`
|
|
180
|
+
handles both (an error is an error in its slot; the run is off the loop). Call `arun_eval`, not the SDK directly.
|
|
181
|
+
- **Reading observations back**: the v2 list endpoint is Cloud-only until Langfuse v4 ships in the open-source
|
|
182
|
+
release, and the v1 endpoint times out on a trace-only query: bound every read by time.
|
|
183
|
+
- Langfuse's managed LLM-as-a-judge and decision-model evaluators, and its UI prompt experiments, test a prompt in
|
|
184
|
+
Langfuse, not your pipeline: out of scope for this toolkit (a product may still use them).
|
|
185
|
+
|
|
186
|
+
## 6. A complete example
|
|
187
|
+
An expert's labelled workbook, your capability run through the capability layer, two repeats, the report kept and
|
|
188
|
+
scored again later. `my_judge` stands for your capability's call (e.g. through `ainvoke_model`); the rest runs as
|
|
189
|
+
written.
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
import asyncio
|
|
193
|
+
import functools
|
|
194
|
+
from pathlib import Path
|
|
195
|
+
|
|
196
|
+
from rag_wright.api import (EvalReport, GoldMapping, arun_eval, load_gold_set, rescore_eval,
|
|
197
|
+
score_judgment)
|
|
198
|
+
|
|
199
|
+
GOLD_FILE = "gold/nli_expert_labels.xlsx" # the expert's own file
|
|
200
|
+
REPORT = "eval_runs/nli_judge.json"
|
|
201
|
+
|
|
202
|
+
mapping = GoldMapping(id="ID", input=["Premise", "Hypothesis"], expected="Label", group="Contract")
|
|
203
|
+
gold = load_gold_set(GOLD_FILE, mapping, name="nli-judge", version="2026-10-12")
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
async def judge(item):
|
|
207
|
+
return await my_judge(item.input["Premise"], item.input["Hypothesis"])
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
gate = functools.partial(score_judgment, actionable="contradiction", precision=0.8, recall=0.7)
|
|
211
|
+
report = asyncio.run(arun_eval(gold, judge, [gate], repeats=2, concurrency=8, progress=print))
|
|
212
|
+
Path(REPORT).parent.mkdir(parents=True, exist_ok=True)
|
|
213
|
+
Path(REPORT).write_text(report.model_dump_json(indent=1), encoding="utf-8")
|
|
214
|
+
print(report.passed, report.scores[0].gate, "errors", report.errors, "flips", report.flips)
|
|
215
|
+
|
|
216
|
+
stricter = functools.partial(score_judgment, actionable="contradiction", precision=0.9, recall=0.7)
|
|
217
|
+
saved = EvalReport.model_validate_json(Path(REPORT).read_text(encoding="utf-8"))
|
|
218
|
+
print("at 0.9 precision:", rescore_eval(saved, gold, [stricter]).passed)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## 7. The TDD loop
|
|
150
222
|
1. Write the eval from the contract + a handful of real gold items → it fails (red) on the unbuilt/weak capability.
|
|
151
223
|
2. Implement the minimum to pass the gate (green).
|
|
152
224
|
3. A/B alternatives (rule / trained classifier / decision model / LLM) on the SAME gold; select on gate + diagnostics + cost + calibration.
|
|
@@ -158,7 +230,11 @@ SDK version's surface, not prose.
|
|
|
158
230
|
- **Gating on a diagnostic** (e.g. nDCG) — report it, don't threshold it.
|
|
159
231
|
- **No reliability check on a subjective gold** — you can't read a number off a gold whose own labels disagree.
|
|
160
232
|
- **Eval not isolated** to the capability (measures the whole pipeline) — you can't attribute a regression.
|
|
161
|
-
- **Scraping stdout** for metrics —
|
|
233
|
+
- **Scraping stdout** for metrics — keep and read the `EvalReport` JSON.
|
|
234
|
+
- **A failed call scored as an answer** (a timeout read as "neutral", an error read as "abstained") — it is an error;
|
|
235
|
+
`arun_eval` keeps it apart (ADR-0133).
|
|
236
|
+
- **Only aggregates kept** — an eval whose per-item outputs were not saved can never be re-scored or checked; keep
|
|
237
|
+
the report.
|
|
162
238
|
- **Faking a win by shrinking the sample / picking easy items** — real, representative, honest.
|
|
163
239
|
|
|
164
240
|
## Hand-off / where this sits
|
|
@@ -16,6 +16,11 @@ ADR-0110 and the other `docs/` paths are in the engine repository: read them the
|
|
|
16
16
|
matching your installed engine.
|
|
17
17
|
This skill is the operational checklist that ties them together.
|
|
18
18
|
|
|
19
|
+
**Which route.** A product deploys and reaches the server through the engine API, `adeploy_model_server` (the
|
|
20
|
+
section after the locked config). The raw `modal deploy` of the bundled script further down is the engine
|
|
21
|
+
developer's route, and what the API runs underneath. **When to stop it** is one rule, in "Cold start & cost": deploy
|
|
22
|
+
once, let it scale to zero between uses, never stop it between runs.
|
|
23
|
+
|
|
19
24
|
## The LOCKED production config (ADR-0110) — do not re-litigate
|
|
20
25
|
**Config B: `Qwen/Qwen3.8-27B-FP8` weights + `--kv-cache-dtype fp8`, on 1× A100-80GB, TP=1, `--max-model-len 16384`, `--gpu-memory-utilization 0.95`.**
|
|
21
26
|
- Config B (FP8 weights) is the **locked deploy** — 52.71× concurrency @16K (ADR-0110 rounds it to 53×), ~23% higher throughput, ~31 GB weights (30.9 GB on disk, 28.9 GiB in VRAM);
|
|
@@ -38,7 +43,7 @@ from rag_wright.api import EngineConfig, ModelServerSpec, adeploy_model_server,
|
|
|
38
43
|
server = await adeploy_model_server(ModelServerSpec(name="acme-qwen", max_num_seqs=32)) # key from VLLM_API_KEY
|
|
39
44
|
config = EngineConfig(store=..., models={"general": server.model_id}) # or any model= argument
|
|
40
45
|
...
|
|
41
|
-
stop_model_server("acme-qwen")
|
|
46
|
+
stop_model_server("acme-qwen") # only to retire it: stopping discards the snapshots (see "Cold start & cost")
|
|
42
47
|
```
|
|
43
48
|
|
|
44
49
|
`amodel_server(spec)` reconnects to a server deployed earlier (a restart, another process) without redeploying.
|
|
@@ -46,7 +51,7 @@ The API key comes from the variable `ModelServerSpec.api_key_env` names (default
|
|
|
46
51
|
key, so set a real one. Needs `rag-wright[modal]` and a Modal login. One app per server name: different names give
|
|
47
52
|
different servers (and URLs), for example one per tenant.
|
|
48
53
|
|
|
49
|
-
**The
|
|
54
|
+
**The engine developer's route: the raw deploy (this succeeded):**
|
|
50
55
|
```
|
|
51
56
|
VLLM_API_KEY=<a long random string> MODAL_IMAGE_BUILDER_VERSION=2025.06 \
|
|
52
57
|
APP_NAME=rw-qwen3-modal MODEL=Qwen/Qwen3.8-27B-FP8 KV_CACHE_DTYPE=fp8 \
|
|
@@ -58,8 +63,7 @@ VLLM_API_KEY=<a long random string> MODAL_IMAGE_BUILDER_VERSION=2025.06 \
|
|
|
58
63
|
The script refuses to deploy without `VLLM_API_KEY`: Modal's web endpoint is public and unauthenticated, so vLLM's
|
|
59
64
|
`--api-key` is the only gate on a billing A100, and there is no default key. Then wire the engine: `.env`
|
|
60
65
|
`VLLM_BASE_URL=https://<workspace>--rw-qwen3-modal-serve.modal.run/v1` and the same `VLLM_API_KEY`; the profile
|
|
61
|
-
`qwen3.8-27b-modal` routes there (the seam also refuses an unset key).
|
|
62
|
-
`uv run --no-sync modal app stop rw-qwen3-modal --yes` (A100 is expensive).
|
|
66
|
+
`qwen3.8-27b-modal` routes there (the seam also refuses an unset key). When to stop it: "Cold start & cost" below.
|
|
63
67
|
|
|
64
68
|
**The engine does NOT reach Modal by default.** Every role's default is `_PRODUCT_LLM = "qwen3.8-27b-modal-or"`,
|
|
65
69
|
the same model routed through OpenRouter (a Modal cold start can still take minutes when Modal builds a snapshot). To send calls to the Modal server, set
|
|
@@ -123,14 +127,22 @@ the OFFICIAL prebuilt vLLM image** rather than pip-building vLLM:
|
|
|
123
127
|
a weight read of 12-154 s from the Volume (9P), then compile-cache load + CUDA-graph capture. Measured and NOT
|
|
124
128
|
worth adopting (ADR-0109 addendum): `--load-format runai_streamer`, precompiled `.pyc`, `HF_HUB_OFFLINE=1` (it
|
|
125
129
|
changes vLLM's compile-cache key every container, so each start recompiles). Poll `/health` for readiness.
|
|
126
|
-
- **
|
|
127
|
-
(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
- **When to stop it -- one rule (EV-6; it used to contradict the line above).** The A100 is billed only while a
|
|
131
|
+
container runs; the server scales to zero after 10 idle minutes (`scaledown_window=600`, no warm minimum) and then
|
|
132
|
+
costs nothing and KEEPS its snapshots, so the next request is back in ~13 s. `modal app stop` saves at most those
|
|
133
|
+
10 minutes and makes the next deploy pay a 9-15 min snapshot-building boot (2026-10-12: a stop after a failed smoke
|
|
134
|
+
run, then a redeploy, cost a 911 s boot).
|
|
135
|
+
1. **Deploy once per server name**; reuse the name (a new name builds new snapshots).
|
|
136
|
+
2. **Build the consumer first** (the bulk / label / eval script, its smoke test, its progress logging) while no
|
|
137
|
+
container runs, then warm, smoke and run in one go. Do not warm a GPU before its consumer is ready (2026-10-04:
|
|
138
|
+
a smoke-warmed A100 sat idle ~20 min while unrelated work ran).
|
|
139
|
+
3. **Between runs, and when you are done, let it scale to zero.** Never stop it between runs; a script's error
|
|
140
|
+
path must not stop it either when a fix-and-rerun is likely.
|
|
141
|
+
4. **Check it reached zero**: `modal app list` shows the app `deployed` with 0 tasks about 10 minutes after the
|
|
142
|
+
last call. If tasks remain past the window, find out why (that is the 2026-10-04 burn) and stop it.
|
|
143
|
+
5. **Stop (`modal app stop <app> --yes`, or `stop_model_server`) only to retire a server**: you will not use it
|
|
144
|
+
for a long time and do not want its endpoint up, or you are replacing its deployment. Expect the next deploy to
|
|
145
|
+
rebuild the snapshots.
|
|
134
146
|
|
|
135
147
|
## The meta-lesson
|
|
136
148
|
Config + recipe live in **ADR-0110 + the script + this skill**. Before any Qwen/Modal work: read them, don't
|
|
@@ -157,7 +157,24 @@ unset. Check both before trusting a run's numbers.
|
|
|
157
157
|
Read the engine's **reference pack** (`load_reference_pack()`) as a worked template — but the contract/compliance
|
|
158
158
|
domain is only an example; your pack and capabilities are your own.
|
|
159
159
|
|
|
160
|
-
## 5.
|
|
160
|
+
## 5. Evals behind your product's backend
|
|
161
|
+
Domain experts own the gold; your UI lets them upload it, run it and compare runs. The engine gives you the pieces
|
|
162
|
+
(the `creating-evals` skill has the method and a complete example):
|
|
163
|
+
- **Upload a gold set**: `aload_gold_set(IngestSource(data=uploaded_bytes, name=filename), GoldMapping(...),
|
|
164
|
+
name=..., version=...)` -- CSV / XLSX / JSONL as the expert wrote it; a `GoldImportError` says where the file is
|
|
165
|
+
wrong, which you show as is. Client data stays `local_only` (the default).
|
|
166
|
+
- **Run it as a background job**, never inside the request: start `arun_eval(gold, task, scorers, repeats=...,
|
|
167
|
+
progress=...)` as a task you keep a reference to, return a job id at once, and let the UI poll. `progress` receives
|
|
168
|
+
`[eval] i/N <item> r<k> ok|error` lines; `evaluate_ingestion`'s async form `aevaluate_ingestion` works the same
|
|
169
|
+
way for ingestion structure. The synchronous `run_eval` raises inside a running event loop.
|
|
170
|
+
- **Return the `EvalReport`** (`report.model_dump(mode="json")`): `passed`, each scorer's gate against its
|
|
171
|
+
thresholds and its diagnostics, errors and flips kept apart, every item's outputs.
|
|
172
|
+
- **Keep run history in your store**: save each report with its gold version; `rescore_eval` scores a saved report
|
|
173
|
+
again (new thresholds, a corrected gold) without calling anything. With `langfuse=True` the runs also appear in
|
|
174
|
+
Langfuse with their links (`report.run_urls`), for teams that use it.
|
|
175
|
+
- **The task is your capability through the capability layer**, so the eval measures what production runs.
|
|
176
|
+
|
|
177
|
+
## 6. Keep the engine current
|
|
161
178
|
|
|
162
179
|
The engine releases in batches (release-please; the engine's `docs/releasing.md`), so you never chase every
|
|
163
180
|
engine PR:
|
|
@@ -185,7 +202,8 @@ mkdir -p .claude/skills && for d in "$SKILLS"/*/; do ln -sfn "${d%/}" ".claude/s
|
|
|
185
202
|
```
|
|
186
203
|
|
|
187
204
|
Re-run it after every engine upgrade (a symlink follows the installed version, but a newly added skill needs a new
|
|
188
|
-
link).
|
|
205
|
+
link). Link these, and any product-building skills another repo writes for product developers, into this repo's
|
|
206
|
+
`.claude/skills/` only, never into the global Claude Code skills, where they would apply in every repo on the machine. The Addy-Osmani spec-driven/TDD/planning skills come from their own source, as the product template says.
|
|
189
207
|
|
|
190
208
|
## Anti-patterns
|
|
191
209
|
|
|
@@ -4,6 +4,30 @@ All notable changes to RAG_Wright are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.8.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.7.0...0.8.0) (2026-10-12)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **EV-1:** aevaluate_ingestion for a web backend, with progress and a JSON-ready result ([7e6377a](https://github.com/fzaidi-dai/RAG_Wright/commit/7e6377a8994764c11f08dcf8cdb47633e6f4660c))
|
|
13
|
+
* **EV-2:** gold-set and report contracts, and gold import from CSV, XLSX and JSONL ([4e72d36](https://github.com/fzaidi-dai/RAG_Wright/commit/4e72d368a24045df2a09f0fc3a221c15985cbf73))
|
|
14
|
+
* **EV-3a:** classification and candidate-then-choose scorers, with parity on saved engine outputs ([977f9a8](https://github.com/fzaidi-dai/RAG_Wright/commit/977f9a8aa59b932d4cc1325bb93ffc6edf4b36a1))
|
|
15
|
+
* **EV-3b:** retrieval and relational scorers, with parity on the ACORD bar and the EDGAR graph leg ([b27b86f](https://github.com/fzaidi-dai/RAG_Wright/commit/b27b86f90d79c68f173f1842b99201a73e634870))
|
|
16
|
+
* **EV-3c:** extraction and judgment scorers, with parity on party extraction, ContractNLI and the semantic judge ([f1fc319](https://github.com/fzaidi-dai/RAG_Wright/commit/f1fc31973dd1d65d20d07578d7d41d6b6e91565f))
|
|
17
|
+
* **EV-3d:** generation and ingestion scorers; all eight scorer kinds done ([b082938](https://github.com/fzaidi-dai/RAG_Wright/commit/b082938db3bc42d81584840d63bc79f0a0ec1d65))
|
|
18
|
+
* **EV-4:** the eval runner (arun_eval, run_eval, rescore_eval) ([a1c0512](https://github.com/fzaidi-dai/RAG_Wright/commit/a1c0512b24fdef245869c854494b42ab8040e5b3))
|
|
19
|
+
* **EV-5:** the optional Langfuse backend; model calls nest under their eval item ([fbbc729](https://github.com/fzaidi-dai/RAG_Wright/commit/fbbc72911733392837bae52ac105ab80d2a922a2))
|
|
20
|
+
* **PS-27:** a missing database is created visibly, or refused with create=False ([2e404f2](https://github.com/fzaidi-dai/RAG_Wright/commit/2e404f2bd44bacf278c2314e6ccf412e72b336c9))
|
|
21
|
+
* **PS-31:** rag_wright.api.pdf_page_count, a locked PDF page count for products ([bf83f57](https://github.com/fzaidi-dai/RAG_Wright/commit/bf83f57905f8c9480c2f7890633b7ba3e474cd09))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* **PS-24:** async model calls work on every event loop in a process (ADR-0135) ([ebd72b2](https://github.com/fzaidi-dai/RAG_Wright/commit/ebd72b2b8b962e20dadb48158d2fb429430038e3))
|
|
27
|
+
* **PS-26:** spreadsheet tables are glued back across blank rows, so no record is read as a header (ADR-0136) ([d0f31ac](https://github.com/fzaidi-dai/RAG_Wright/commit/d0f31ac7628a9aabd079630f18fc86a8da617cfb))
|
|
28
|
+
* **PS-28:** a generated answer states the evidence's support, and "none" is an abstention (ADR-0137) ([cb98642](https://github.com/fzaidi-dai/RAG_Wright/commit/cb9864236d076aea7bf31e09cab18a8eb4575dc2))
|
|
29
|
+
* **PS-29:** PDF parses run one at a time and the engine reaches pdfium through one locked door (ADR-0138) ([f7a17ad](https://github.com/fzaidi-dai/RAG_Wright/commit/f7a17ad7645d0bd269f955e51059a431ce5bad17))
|
|
30
|
+
|
|
7
31
|
## [0.7.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.6.0...0.7.0) (2026-10-11)
|
|
8
32
|
|
|
9
33
|
|
|
@@ -55,10 +55,19 @@ The failure mode to avoid, which has happened before: a command fails with "modu
|
|
|
55
55
|
|
|
56
56
|
## Start of every session
|
|
57
57
|
|
|
58
|
-
> **CURRENT STATE (2026-10-
|
|
58
|
+
> **CURRENT STATE (2026-10-12): the evals workstream is COMPLETE; `rag-wright` 0.8.0 is ready to release** (ledger
|
|
59
|
+
> `docs/specs/evals/plan.md`, EV-0..EV-6; EV-7 optional): gold sets from experts' files, a scorer per capability kind,
|
|
60
|
+
> the runner `arun_eval` with an optional Langfuse backend, `EvalReport`, `aevaluate_ingestion`; the reference is
|
|
61
|
+
> `docs/evals.md`. With it in 0.8.0: PS-24 (async calls on every event loop, ADR-0135), PS-25 (the release PR bumps
|
|
62
|
+
> `uv.lock`), PS-26 (spreadsheet tables glued across blank rows, ADR-0136), PS-27 (a missing database created
|
|
63
|
+
> visibly, or refused with `create=False`), PS-28 (answers state their support; "none" abstains, ADR-0137), PS-29 and
|
|
64
|
+
> PS-31 (one PDF parse at a time and one locked door to pdfium, `pdf_page_count`; RuleWright issue 0052, ADR-0138).
|
|
65
|
+
> RuleWright's guide: `docs/specs/public-surface/rulewright-migration-0.8.0.md`. Open: PS-30 (a process-pool parse,
|
|
66
|
+
> later). Before it:
|
|
67
|
+
> **The public-surface workstream is COMPLETE and released as `rag-wright` 0.7.0** (ledger
|
|
59
68
|
> `docs/specs/public-surface/plan.md`, ADR-0128: two public tiers, `rag_wright.api` for a product's seam and
|
|
60
69
|
> `rag_wright.pack_sdk` for a pack's code, enforced by import contracts and a domain-vocabulary guard). Next:
|
|
61
|
-
> RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md`, `-0.5.0.md` and `-0.
|
|
70
|
+
> RuleWright moves from `docs/specs/public-surface/rulewright-migration-0.3.0.md` then `rulewright-migration-0.4.0.md`, `-0.5.0.md`, `-0.6.0.md` and `-0.7.0.md`; PS-R4 (the unit-labelling eval) is done, unreleased. 0.7.0 adds PS-20 (the model server cold-starts from a GPU snapshot, ADR-0132) and PS-22 (the model-call deadline follows the timeout; a token cap on thinking models' structured calls, ADR-0133). Before it,
|
|
62
71
|
> the **ingestion-hooks** workstream (ADR-0124) is
|
|
63
72
|
> COMPLETE and released as **`rag-wright` 0.2.0** (PyPI + GitHub tag/release `0.2.0`; release process
|
|
64
73
|
> `docs/releasing.md`): the generic `build_ingestion` with hooks and domain-neutral defaults, the neutral default
|
|
@@ -188,6 +197,7 @@ Commits are how the memory above becomes durable. Git history is the parallel re
|
|
|
188
197
|
- `building-an-ingestion-capability` (`.claude/skills/building-an-ingestion-capability/SKILL.md`), when a domain needs its documents ingested with `build_ingestion`: deciding the unit, the extractor and optional hooks, the pack record types, tuning with `evaluate_ingestion`, spreadsheets and embedded files (its example is executed by `tests/skills/test_ingestion_skill_example.py`).
|
|
189
198
|
- `using-the-rag-wright-engine`, the CONSUMER-side playbook (for a product repo building on the engine) — kept here, version-matched to the engine; a product pulls it into its own `.claude/skills/`.
|
|
190
199
|
- The engine-authored skills above live once in `src/rag_wright/.agents/skills/` and ship in the wheel (PS-10); this repo's `.claude/skills/` entries are symlinks to them, so edit the files there. A product links them from its installed engine (`docs/installation.md`). `tests/arch/test_shipped_skills.py` keeps them packaged, linked and readable from a product repo.
|
|
200
|
+
- Skill placement (ADR-0134): a skill written for product developers goes in `src/rag_wright/.agents/skills/` and is linked into a repo's `.claude/skills/` only, never into the global `~/.claude/skills` (that is for the developer's own way-of-working skills); a skill only for working on this repo is a real folder in `.claude/skills/` and is not shipped.
|
|
191
201
|
- `Graphify`, for the `framework` and `project` graphs.
|
|
192
202
|
- The LangChain docs MCP server (`https://docs.langchain.com/mcp`), for understanding LangGraph and Deep Agents concepts. It explains; it does not confirm. Grounding still resolves against the code graph.
|
|
193
203
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
|
|
6
6
|
Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
|
|
@@ -34,6 +34,7 @@ Requires-Dist: langgraph>=1.2.11
|
|
|
34
34
|
Requires-Dist: laya>=0.3.22
|
|
35
35
|
Requires-Dist: mcp>=1.28.1
|
|
36
36
|
Requires-Dist: olefile>=0.47
|
|
37
|
+
Requires-Dist: openpyxl>=3.1
|
|
37
38
|
Requires-Dist: pillow>=12.3.0
|
|
38
39
|
Requires-Dist: pydantic>=2.0
|
|
39
40
|
Requires-Dist: pypdfium2>=5.11
|
|
@@ -112,6 +113,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
|
|
|
112
113
|
- **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
|
|
113
114
|
sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
|
|
114
115
|
product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
|
|
116
|
+
- **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
|
|
117
|
+
kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
|
|
115
118
|
- **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
|
|
116
119
|
[Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
|
|
117
120
|
- **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
|
|
@@ -57,6 +57,8 @@ The whole doc set is under [`docs/`](docs/). Pick your path:
|
|
|
57
57
|
- **Building a product on the engine?** The [domain-adaptation guide](docs/domain-adaptation/) walks the whole
|
|
58
58
|
sequence (author a `.ttl` pack → build & register capabilities → eval-first → ingest → entity resolution → the
|
|
59
59
|
product seam); a coding agent should drive it with the `using-the-rag-wright-engine` skill.
|
|
60
|
+
- **Measuring a capability?** [Evals](docs/evals.md): gold sets from your experts' files, a scorer per capability
|
|
61
|
+
kind, a runner with repeats, a report your backend can return, optional Langfuse runs.
|
|
60
62
|
- **Going deep?** [Architecture](docs/architecture.md), the generated [API reference](docs/api/), the
|
|
61
63
|
[Reference pack](docs/reference-pack.md), and the [ADR index](docs/adr/README.md).
|
|
62
64
|
- **Releases?** See the [CHANGELOG](CHANGELOG.md) and [how releases work](docs/releasing.md) (batched via
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ADR-0134: Skills for product developers are linked into each product repo, never installed globally
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-10-12 · **Related:** PS-10 (the engine's skills ship in the wheel),
|
|
4
|
+
ADR-0052 (engine/product split)
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Two kinds of repo now write skills for people building a product on the engine. The engine writes skills about using
|
|
9
|
+
the engine (`using-the-rag-wright-engine`, `creating-evals`, ...). A product may write generic product-building
|
|
10
|
+
skills (UI, backend, tenancy, workspaces, the agent harness) that a later product can reuse. A skill linked into
|
|
11
|
+
`~/.claude/skills` applies in every repo on the machine: an agent working on the engine, or on an unrelated project, then sees product-building advice that is not meant for it, and a globally linked skill
|
|
12
|
+
follows one checkout rather than the version a given product depends on. The product-starter templates said "link
|
|
13
|
+
the shared generic skills from their source" without saying where to link them.
|
|
14
|
+
|
|
15
|
+
## Decision
|
|
16
|
+
|
|
17
|
+
Skills live in one of three places, by who they are for:
|
|
18
|
+
|
|
19
|
+
1. **The developer's own way of working** (TDD, planning, debugging, ADRs) may be installed in `~/.claude/skills`.
|
|
20
|
+
Nothing from the engine or a product repo is linked there.
|
|
21
|
+
2. **Skills for working on one repo only** are real folders in that repo's `.claude/skills/` and are never shipped.
|
|
22
|
+
3. **Skills for product developers** live in a source folder in the repo that writes them, and each product links them
|
|
23
|
+
into its own `.claude/skills/` (gitignored), never globally:
|
|
24
|
+
- the engine's: `src/rag_wright/.agents/skills/`, shipped in the wheel (PS-10). A product links them from its
|
|
25
|
+
installed engine (the copy that matches the version it runs) or, while co-developing, from an engine checkout;
|
|
26
|
+
both are links into the product's own `.claude/skills/`;
|
|
27
|
+
- a product's own: wherever that product keeps them, outside the engine's concern.
|
|
28
|
+
|
|
29
|
+
The engine's docs, templates and skills that show how to link skills only ever link into the product repo's
|
|
30
|
+
`.claude/skills/`; `tests/arch/test_shipped_skills.py` fails on a command in them that links into
|
|
31
|
+
`~/.claude/skills`.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
- An engine session sees the engine's skills through this repo's `.claude/skills/` links only; a session in an
|
|
36
|
+
unrelated repo does not see them.
|
|
37
|
+
- A product re-runs its link step after an engine upgrade (as before) and after pulling a new generic skill.
|
|
38
|
+
- The engine governs only its own skills, docs and templates; where a product keeps its skills is the product's
|
|
39
|
+
decision, and the engine's templates name the slot (`{{PRODUCT_DEV_SKILL_SOURCES}}`) without naming a folder.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# ADR-0135: The model seam gives each event loop its own async HTTP client
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0056/0057 (the bounded retry and the async
|
|
4
|
+
deadline), EV-0 finding 5 (`docs/specs/evals/plan.md`), PS-24
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
langchain_openai's `ChatOpenAI` takes its async HTTP client at construction, and by default shares one cached
|
|
9
|
+
client per base URL and timeout across the whole process. httpx's pooled connections belong to the event loop that
|
|
10
|
+
opened them. The seam builds runnables once and calls them later, possibly on another loop: Langfuse's
|
|
11
|
+
`run_experiment` runs every experiment on a fresh loop, and a web backend has its own loop beside a worker's. EV-0
|
|
12
|
+
saw the first calls of the second run fail at once with `APIConnectionError` (`Event loop is closed` underneath);
|
|
13
|
+
the seam's retry recovered them, at the cost of a retry, and a burst at the start of a run could use up the
|
|
14
|
+
retries.
|
|
15
|
+
|
|
16
|
+
## Decision
|
|
17
|
+
|
|
18
|
+
`build_model` passes `ChatOpenAI` an `httpx.AsyncClient` (`_LoopLocalAsyncClient`) that sends each request through
|
|
19
|
+
a client of the running event loop. That client is built the way langchain_openai builds its default (its own
|
|
20
|
+
builder and socket options), kept per loop in a weak map so it goes with the loop, and the wrapper is cached per
|
|
21
|
+
base URL and timeout, so calls on one loop still share their connections. A caller's own `http_async_client` wins,
|
|
22
|
+
and with `OPENAI_PROXY` set langchain_openai keeps building its proxied client.
|
|
23
|
+
|
|
24
|
+
## Consequences
|
|
25
|
+
|
|
26
|
+
- Async calls work on every event loop in a process, with no retry spent; synchronous calls are unchanged.
|
|
27
|
+
- The seam now imports two private langchain_openai helpers (`_build_async_httpx_client`,
|
|
28
|
+
`_resolve_socket_options`), so the per-loop client matches the default exactly; a langchain_openai upgrade that
|
|
29
|
+
moves them fails at import, and the tests in `tests/models/test_seam_event_loops.py` show it.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# ADR-0136: A spreadsheet table cut at its blank rows is glued back together after the parse
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0124 (ING-4a hidden sheets, ING-6 embedded files,
|
|
4
|
+
ING-7 `table_rows`), EV-2 (gold import), PS-26
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
docling cuts a sheet into separate tables at every blank row (its Excel backend's `gap_tolerance` defaults to 0),
|
|
9
|
+
and the whole engine reads each table's first row as its header: `table_rows`, the compact table text, the segmenter,
|
|
10
|
+
record units and the row-span map. A database sheet with blank rows between blocks therefore lost the first record
|
|
11
|
+
after each blank row, and the rows after it were keyed under that record's values (a 5-record fixture kept 3).
|
|
12
|
+
Raising `gap_tolerance` is not a fix: it also merges a title block and a different table below into one table.
|
|
13
|
+
|
|
14
|
+
## Decision
|
|
15
|
+
|
|
16
|
+
After the parse (`capabilities/sheet_tables.py`), every table piece directly below another in the same columns,
|
|
17
|
+
with only blank rows between, is decided by its first row:
|
|
18
|
+
|
|
19
|
+
- **data, glued on**: the number or date columns agree (every data row above has a number or date there, the
|
|
20
|
+
header does not, and the first row does), or, with no such columns, the formatting does (the header is bold or
|
|
21
|
+
filled differently from the data rows, read with openpyxl, and the first row is formatted like the data);
|
|
22
|
+
- **header, left apart**: the same header repeated, a header-formatted row, text in a number column, a table above
|
|
23
|
+
whose top row does not name every column its rows use (a form's section label), or a first row that does not fill
|
|
24
|
+
the columns the rows above fill;
|
|
25
|
+
- **unsure, left apart and warned**: a text-only table with no formatting difference, which the file alone cannot
|
|
26
|
+
decide. `evaluate_ingestion` lists it in a new `warnings` list (never a failure).
|
|
27
|
+
|
|
28
|
+
A glued table keeps each block's sheet rectangle as another `prov` entry, so an embedded file anchored on a sheet
|
|
29
|
+
cell still maps to its table row (`_table_at` walks the blocks). The merge runs on a fresh parse and once on a parse
|
|
30
|
+
cached before it (the ING-4a pattern), so no cache key changes. `openpyxl` is declared (it was installed through
|
|
31
|
+
docling).
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
- A database sheet's records survive its blank rows; titles, forms and different tables are parsed as before.
|
|
36
|
+
- On the five TexWright workbooks (measured locally, structure only): nothing glued, 63 tables and 596 rows as
|
|
37
|
+
before, 2 warnings (one-column lists separated by a blank row).
|
|
38
|
+
- A sheet shape none of the rules covers is added as a new case when a customer's file shows it.
|
rag_wright-0.8.0/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# ADR-0137: A generated answer states the evidence's support every time, and "none" is an abstention
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-10-12 · **Related:** ADR-0045 (free text with light tags), PREC-1a
|
|
4
|
+
(`answer_kind`), EV-3d (`score_generation`), PS-28
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
The answer generator offered `<abstain/>` as an optional alternative output. Asked about something the evidence
|
|
9
|
+
does not contain, the model wrote "the provided evidence does not contain X" inside `<answer>`, cited evidence, and
|
|
10
|
+
the parser labelled it `answered` (EV-3d, live: 20 of 20 questions asked of contracts that lack the clause). A
|
|
11
|
+
product showed an answered, cited result for something that is not there.
|
|
12
|
+
|
|
13
|
+
## Decision
|
|
14
|
+
|
|
15
|
+
1. The tag instructions require `<support>full|partial|none</support>` on every response, judged by meaning rather
|
|
16
|
+
than labels (text that serves the purpose asked about answers it even when the question's wording never
|
|
17
|
+
appears). `none` is for when nothing in the evidence answers any part of the question, including a reply that
|
|
18
|
+
the evidence has no such provision; it cites nothing.
|
|
19
|
+
2. The parser maps `none` to an abstention that keeps the model's sentence as its reason (scrubbed of ids like any
|
|
20
|
+
prose the reader sees), `partial` to `partial` and `full` to `answered`. A response without the tag parses as
|
|
21
|
+
before (`<partial/>`, else answered).
|
|
22
|
+
3. The `generation` skill says the same. No phrase matching on the answer text (English-only, and it would catch
|
|
23
|
+
real answers such as "the agreement does not allow assignment").
|
|
24
|
+
|
|
25
|
+
Rejected: treating `none` with citations as `partial` (measured: false answers back to 8 of 20).
|
|
26
|
+
|
|
27
|
+
## Consequences
|
|
28
|
+
|
|
29
|
+
- Measured once on the EV-3d set (20 answerable, 20 not): false answers 20/20 -> 0/20; false abstentions 0/20 ->
|
|
30
|
+
4/20, all hard cases (gold answers starting mid-sentence, a party named only in a header); citation recall
|
|
31
|
+
0.946 -> 0.758, the old figure inflated by "does not contain" answers whose citations happened to hold the gold.
|
|
32
|
+
Generation varies near the abstain boundary: one run, not a distribution.
|
|
33
|
+
- A product sees an abstention, with the model's one-sentence reason in `answer`, where it used to see an answered
|
|
34
|
+
"not found".
|