rag-wright 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rag_wright-0.3.1/.release-please-manifest.json +3 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/CHANGELOG.md +7 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/PKG-INFO +1 -1
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/public-surface/plan.md +1 -1
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +3 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/pyproject.toml +6 -1
- rag_wright-0.3.1/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +153 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +161 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +188 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/creating-evals/SKILL.md +156 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/laya/SKILL.md +136 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +109 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +96 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/setfit/SKILL.md +311 -0
- rag_wright-0.3.1/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +175 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_shipped_skills.py +12 -8
- {rag_wright-0.3.0 → rag_wright-0.3.1}/uv.lock +1 -1
- rag_wright-0.3.0/.release-please-manifest.json +0 -3
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/settings.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.env.example +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/.gitignore +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/CLAUDE.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/LICENSE +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/SPEC.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/conftest.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/adr/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/api/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/api/pack_sdk.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/architecture.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/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.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/concepts.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/configuration.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/kg-construction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/installation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/playbook.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/quickstart.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/reference-pack.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/releasing.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/acord.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/build_golden.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/embedded_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/function_ceiling.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/function_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/golden.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/harness.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/kg_primary.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/multihop.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/nl_to_type.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/relational_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/test_acord.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/test_harness.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/examples/quickstart.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/plan.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/release-please-config.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acord_unify.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/graph_status.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/measure_silver.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/api/workspace.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/parsing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/builder.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/store/arcadedb.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/store/seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tasks.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_discover.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_documents.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_options.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_usage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/async_helpers.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/conftest.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/models/test_usage.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/skills/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/util/__init__.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.3.0 → rag_wright-0.3.1}/tests/util/test_spacy_model.py +0 -0
|
@@ -4,6 +4,13 @@ All notable changes to RAG_Wright are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.3.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.3.0...0.3.1) (2026-10-09)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* **PS-10:** the release build ships the engine skills ([c505ba6](https://github.com/fzaidi-dai/RAG_Wright/commit/c505ba609826976bd1ff4744e56737207bf1d0ba))
|
|
13
|
+
|
|
7
14
|
## [0.3.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.2.1...0.3.0) (2026-10-09)
|
|
8
15
|
|
|
9
16
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
|
|
6
6
|
Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
|
|
@@ -83,5 +83,5 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
83
83
|
| PS-8b | G21: the `rag_wright.pack_sdk` tier (D1: re-exports of the pack-author building blocks not on `api`, same compatibility promise); D2: the generic private helpers the pack used promoted under public names; D3: `StoreConfig.from_env()` so a pack's standalone entrypoints open a workspace instead of the backend; the SDK's generated reference | export-identity tests; generated reference current; full suite | done: `rag_wright.pack_sdk` (83 re-exports, disjoint from `api`, 4 clash renames); 9 private helpers promoted; `StoreConfig.from_env()`; `docs/api/pack_sdk.md` generated (deterministic signatures); guard covers both tiers; live from_env + pack_store |
|
|
84
84
|
| PS-8c | G21: the reference pack imports only `rag_wright.api` + `rag_wright.pack_sdk` (+ itself); its MCP servers open workspaces + `pack_store`; an import contract enforces it (D4) | import contract; full suite; live re-ingest record-identical | done: 172 imports rewritten by object identity (52 files), zero engine-internal imports left in packs; MCP servers open workspaces via `StoreConfig.from_env()` + `pack_store`; import contract (direct imports, proof test); live re-ingest identical (7 clauses, 2 entities, 1 edge, 14 spans) |
|
|
85
85
|
| PS-9 | Docs: API reference regenerated; the engine-usage + authoring skills, the domain-adaptation guide, the product-starter templates and the RuleWright guide updated (the interim rules in its Q&A replaced by the new surface); G15-G21 closed in `_engine-gaps.md`; ADR; product-starter templates (CLAUDE.md + playbook + README) and the `using-the-rag-wright-engine` skill: define an `engine-docs` Graphify lane (`{{ENGINE_DOCS_LANE_PATH}}`: the engine repo's `docs/` + skills at the tag matching the installed engine) next to the `engine` lane, and a standing rule to rebuild both engine lanes on every engine version change (Dependabot merge, `uv sync`, editable-mode edits) before grounding the next call; skill lessons from PS-R3 (ADR-0126) in `setfit` and `creating-evals`: evaluate a classifier the way its consumers use it (top-1 accuracy when anything acts on the primary label, alongside top-k for soft tags; on pipeline-produced inputs incl. headings and no-label spans, not only curated snippets) and list the consumers of the primary label (and check them end to end) before declaring a classifier swap has no downstream impact; fix the stale `clause_function_classification` manifest description (says LegalBERT; production is the SetFit ensemble) | doc-reference test; full suite | done: RuleWright 0.3.0 guide; G21 closed, G1/G13 mostly closed (SDK +GraphWriter/build_graph_extraction, 85); skills (two tiers, engine-docs lane + rebuild rule, classifier-eval lessons, bytes sources); templates; ER/authoring/config guides; manifest text; ADR-0128; tasks.md + CLAUDE.md banner |
|
|
86
|
-
| PS-10 | Ship the engine-authored Claude Code skills in the wheel, version-matched to the engine: the eight skills (`using-the-rag-wright-engine`, `authoring-a-capability`, `building-an-ingestion-capability`, `creating-evals`, `classifier-opportunity-analysis`, `setfit`, `laya`, `qwen-vllm-modal` with its Modal deploy script) live once under `src/rag_wright/.agents/skills/` (the convention docling and fastapi use) and the engine repo's `.claude/skills/` links to them; each shipped skill marks its engine-repo paths as such and gives a product its own verify step; the product-starter templates, `using-the-rag-wright-engine` and the RuleWright 0.3.0 guide say to link them from the installed package | wheel-contents test (builds the wheel); one-source + engine-repo-path tests; doc-reference test; full suite | done: 8 skills + the Qwen deploy script under `src/rag_wright/.agents/skills/`, `.claude/skills/` and `scripts/modal_qwen3_vllm_server.py` link to them; engine-repo paths marked, a product verify step in authoring-a-capability, local paths removed; one link command (by import, PyPI or editable) in the skill, installation, templates and RuleWright guide section 5; `.agents/` out of the vocabulary ratchet; wheel built offline and linked from a scratch product |
|
|
86
|
+
| PS-10 | Ship the engine-authored Claude Code skills in the wheel, version-matched to the engine: the eight skills (`using-the-rag-wright-engine`, `authoring-a-capability`, `building-an-ingestion-capability`, `creating-evals`, `classifier-opportunity-analysis`, `setfit`, `laya`, `qwen-vllm-modal` with its Modal deploy script) live once under `src/rag_wright/.agents/skills/` (the convention docling and fastapi use) and the engine repo's `.claude/skills/` links to them; each shipped skill marks its engine-repo paths as such and gives a product its own verify step; the product-starter templates, `using-the-rag-wright-engine` and the RuleWright 0.3.0 guide say to link them from the installed package | wheel-contents test (builds the wheel); one-source + engine-repo-path tests; doc-reference test; full suite | done: 8 skills + the Qwen deploy script under `src/rag_wright/.agents/skills/`, `.claude/skills/` and `scripts/modal_qwen3_vllm_server.py` link to them; engine-repo paths marked, a product verify step in authoring-a-capability, local paths removed; one link command (by import, PyPI or editable) in the skill, installation, templates and RuleWright guide section 5; `.agents/` out of the vocabulary ratchet; wheel built offline and linked from a scratch product. The 0.3.0 release wheel (built from the sdist) shipped no skills: hatchling's sdist left out `.agents/`; fixed by an sdist `force-include`, and the test now builds sdist then wheel as `publish.yml` does (0.3.1) |
|
|
87
87
|
| PS-11 | Docs: how a product swaps the model behind a hook decision (e.g. a trained classifier vs Jev for span tagging): `classification-and-decision-models.md` gains a section with a `span_tagger` that invokes a capability of the product's own by name, a Jev-backed implementation of it, the swap by re-registering the slug, filling `TaggedSpan.scores` from the probabilities so a voting `unit_representative` keeps working, measuring before choosing, and the large-label-set caveat; one cross-reference each in `kg-construction.md` and `building-an-ingestion-capability` | the section's example executed by a hermetic test (Jev stubbed); doc-reference test; full suite | done: section 5 of the classification & decision models guide (hook calls the product's own slug; classifier and Jev arms; swap by re-registering; scores for a voting representative; measure/cost/repeatability/label-set caveats); cross-references in kg-construction and the ingestion skill; example executed by `tests/api/test_decision_swap_doc_example.py`; live Jev call confirmed probabilities for every option |
|
{rag_wright-0.3.0 → rag_wright-0.3.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md
RENAMED
|
@@ -65,6 +65,9 @@ now available from one of the two tiers.
|
|
|
65
65
|
|
|
66
66
|
## 5. Link the engine skills from the installed engine (PS-10)
|
|
67
67
|
|
|
68
|
+
Needs rag-wright 0.3.1 or later from PyPI: the 0.3.0 wheel left the skills out (an editable path dependency
|
|
69
|
+
has them either way).
|
|
70
|
+
|
|
68
71
|
The engine's Claude Code skills now ship in the package, at `rag_wright/.agents/skills/` (the convention docling and
|
|
69
72
|
fastapi use), version-matched to the engine: `using-the-rag-wright-engine`, `building-an-ingestion-capability`,
|
|
70
73
|
`authoring-a-capability`, `creating-evals`, `classifier-opportunity-analysis`, `setfit`, `laya` and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rag-wright"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.1"
|
|
4
4
|
description = "A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.13"
|
|
@@ -89,6 +89,11 @@ build-backend = "hatchling.build"
|
|
|
89
89
|
[tool.hatch.build.targets.wheel]
|
|
90
90
|
packages = ["src/rag_wright"]
|
|
91
91
|
|
|
92
|
+
# PS-10: the shipped engine skills. Hatchling's sdist walk leaves this dot-directory out, and publish.yml builds the
|
|
93
|
+
# wheel from the sdist, so without this the release ships no skills (0.3.0 did). tests/arch/test_shipped_skills.py.
|
|
94
|
+
[tool.hatch.build.targets.sdist.force-include]
|
|
95
|
+
"src/rag_wright/.agents" = "src/rag_wright/.agents"
|
|
96
|
+
|
|
92
97
|
[tool.pytest.ini_options]
|
|
93
98
|
testpaths = ["tests", "eval"]
|
|
94
99
|
pythonpath = ["src", "."]
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: authoring-a-capability
|
|
3
|
+
description: >-
|
|
4
|
+
How to author a new RAG_Wright engine capability of any kind (subgraph, function, model, agent_skill, mcp_tool)
|
|
5
|
+
so it is registered, ARD-discoverable, and invokable by name through the engine API. Use it whenever you add a
|
|
6
|
+
new capability or a new-domain product/graph needs one: it gives the shared registration + ARD + invocation
|
|
7
|
+
contract (the four surfaces + the definition of done), the per-kind implementation specifics, and the
|
|
8
|
+
conformance guardrail that keeps the catalog honest. Grounded against the real code; keep it in step with it.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Authoring a capability
|
|
12
|
+
|
|
13
|
+
A **capability** is a named, ARD-registered unit of engine behavior (FR-C). Every capability has a `kind`
|
|
14
|
+
(`ard.py::EntryKind`): `subgraph | function | model | agent_skill | mcp_tool` (`dagster_asset` is reserved). The
|
|
15
|
+
contract below is the SAME for every kind; only the implementation differs. Capabilities compose — a subgraph calls
|
|
16
|
+
functions/models; a product invokes a capability by name through `rag_wright.api`.
|
|
17
|
+
|
|
18
|
+
**Ground every call before writing it** (CLAUDE.md library rule). The authoritative sources this skill summarizes:
|
|
19
|
+
`capabilities/registry.py` (the canonical-slug set, `register_canonical_slugs`, the internal
|
|
20
|
+
`CapabilityRegistry.register`), `capabilities/manifests.py` (`CapabilityManifest`; `_ENGINE_SPECS`, the engine's
|
|
21
|
+
7 generic manifests returned by `engine_capabilities()`; `MANIFEST_SPECS`, the runtime catalog; `register_capability`,
|
|
22
|
+
`load_pack(module)`), the reference pack's manifests (`CONTRACT_SPECS` / `COMPLIANCE_SPECS` in `rag_wright.packs.{contracts,compliance}.pack`), `capabilities/ard.py` (`EntryKind`, `MEDIA_TYPE_BY_KIND`,
|
|
23
|
+
`CALLABLE_KINDS`), `scripts/publish_manifests.py`, `api/invoke.py` + `capabilities/invoke.py::capability_impl` (the adapter-free impl_ref invoker + drift guard),
|
|
24
|
+
`api/mcp.py` (generic MCP exposure). The guardrail test is `tests/capabilities/test_authoring_contract.py`.
|
|
25
|
+
Paths here are relative to `src/rag_wright/` unless they start with `scripts/` or `tests/`; all of them
|
|
26
|
+
are in the engine repository: read them there or on GitHub, at the tag matching your installed engine. A product imports the
|
|
27
|
+
authoring surface from `rag_wright.api`: `CapabilityManifest`, `register_capability`, `load_pack`,
|
|
28
|
+
`engine_capabilities`, `register_canonical_slugs`, `canonical_capability_slugs`, `load_reference_pack`,
|
|
29
|
+
`reference_pack` (the same objects as in `capabilities/manifests.py` and `capabilities/registry.py`).
|
|
30
|
+
|
|
31
|
+
## The four surfaces (the definition of done)
|
|
32
|
+
|
|
33
|
+
A finished capability touches these: 1 (implementation) is for EVERY kind; 2 (the invoke factory + `impl_ref`) is
|
|
34
|
+
for invokable kinds (`subgraph`/`model`); 3 (manifest + register) is for every discoverable kind; 4 (invocable +
|
|
35
|
+
MCP) follows automatically for invokable kinds; 4b (a bespoke MCP server) is optional.
|
|
36
|
+
|
|
37
|
+
1. **Implementation** — the real code, in that kind's home (see per-kind below).
|
|
38
|
+
2. **The invoke factory + `impl_ref`** (invokable kinds: subgraph/model) — write a co-located
|
|
39
|
+
`async def ainvoke(resources, inputs)` (subgraph) / `def <name>(resources, inputs)` (model) in the capability's
|
|
40
|
+
own module. A subgraph factory builds over the opaque `WorkspaceHandle` (`resources._store`,
|
|
41
|
+
`resources._embedder`, `resources.model_id(role)`), never env; a model factory is store-independent and ignores
|
|
42
|
+
`resources`. The manifest's `impl_ref="module:attr"` points to it. The invoker imports
|
|
43
|
+
it LAZILY and calls it — there is **NO central adapter dict** (EP-CORE-2). A plain function/agent_skill/mcp_tool
|
|
44
|
+
declares no `impl_ref`.
|
|
45
|
+
3. **ARD manifest + register it** — a `CapabilityManifest(slug, kind, display_name, description,
|
|
46
|
+
representative_queries=(2-5…), tags=…, impl_ref=…)`. **The catalog ships EMPTY (EP-CORE-3):** call
|
|
47
|
+
`register_capability(manifest)` at runtime to add it (a product registers its own; the engine's reference pack is
|
|
48
|
+
opt-in via `load_reference_pack()`). `representative_queries` is the field ARD discovery ranks on — write real,
|
|
49
|
+
specific queries. For the ENGINE's reference pack, the manifest is committed in its pack's `pack.py` (`CONTRACT_SPECS` / `COMPLIANCE_SPECS`) and
|
|
50
|
+
the slug in its `*_CAPABILITY_SLUGS` (added to the registry by `register_canonical_slugs` when the pack loads);
|
|
51
|
+
a GENERIC engine capability's manifest is in `manifests.py::_ENGINE_SPECS` and its slug in
|
|
52
|
+
`registry.ENGINE_CAPABILITY_SLUGS`. Engine capabilities (`jev_decision`, `generation`, ...) are NOT in the
|
|
53
|
+
catalog until registered too: register them from `engine_capabilities()` when your pack uses them.
|
|
54
|
+
**Packs:** a pack is a module exposing `register()`, which calls `register_canonical_slugs(...)` for its slugs and
|
|
55
|
+
then `register_capability(m)` per manifest (plus any engine capabilities it builds on); load it with
|
|
56
|
+
`load_pack("<module>")`. `load_reference_pack()` is just `load_pack("rag_wright.packs.compliance.pack")` (compliance registers contracts first).
|
|
57
|
+
A downstream product can register without touching the canonical set (`register_capability` does not check
|
|
58
|
+
slugs), BUT `manifests.author()` rejects a non-canonical slug, so a product that publishes ARD JSON must call
|
|
59
|
+
`register_canonical_slugs` for its slugs first.
|
|
60
|
+
Publish to `~/.air/registry` with `uv run python scripts/publish_manifests.py`; that script publishes only the
|
|
61
|
+
engine's reference pack (it calls `load_reference_pack()`), so a product publishes its own with `publish_all`.
|
|
62
|
+
Callable kinds get `ResponseBounds` (defaulted); `agent_skill` must NOT declare bounds (loaded, not called).
|
|
63
|
+
4. **Invocable + MCP for free** — once registered with an `impl_ref`, the capability is callable as
|
|
64
|
+
`ainvoke_subgraph(slug, inputs, resources=ws)` / `invoke_model(slug, inputs, resources=ws)` (or
|
|
65
|
+
`ainvoke_model(...)`, all on `rag_wright.api`). The invoker first checks the slug is in the catalog with the
|
|
66
|
+
kind that invoker serves (`KeyError` / `ValueError` otherwise), then imports the `impl_ref` via
|
|
67
|
+
`capabilities.invoke.capability_impl` — AND exposable over MCP (surface 4b), with **zero engine edits**.
|
|
68
|
+
|
|
69
|
+
4b. **MCP exposure** (optional) — any invokable capability is already an MCP tool with zero extra code via
|
|
70
|
+
`api/mcp.py::build_capability_mcp(slug, resources=ws)` (EP-RT-2). Write a bespoke FastMCP server only
|
|
71
|
+
when you want a CURATED, typed tool signature instead of the generic opaque-`inputs` surface.
|
|
72
|
+
|
|
73
|
+
## Per-kind specifics
|
|
74
|
+
|
|
75
|
+
### subgraph — a compiled LangGraph `StateGraph`
|
|
76
|
+
- **Home:** a generic engine subgraph in `subgraphs/<slug>.py`; a domain subgraph in its pack, `packs/<pack>/subgraphs/<slug>.py`
|
|
77
|
+
(the reference pack: `packs/contracts/subgraphs/typed_property_retrieval.py`). A `production_<slug>(*, store, ...) -> CompiledGraph` builder: `g = StateGraph(_State)`,
|
|
78
|
+
add nodes/edges with `START`/`END`, `return g.compile()`. Nodes call functions/models (compose).
|
|
79
|
+
- **Invoke:** the co-located `async def ainvoke(resources, inputs)` factory (impl_ref target) builds + awaits the graph.
|
|
80
|
+
- Retry/dead-letter come from the graph scaffold, not the invoker. `CapabilityManifest` has no contract field (only
|
|
81
|
+
the internal `CapabilityRegistry.register(contract=...)` takes one); where the typed I/O must be declared, set
|
|
82
|
+
`capability_interface` on the manifest.
|
|
83
|
+
|
|
84
|
+
### function — a plain, typed callable
|
|
85
|
+
- **Home:** `capabilities/<slug>.py` (generic) or `packs/<pack>/capabilities/<slug>.py` (domain). A deterministic or model-backed callable with a Pydantic in/out contract.
|
|
86
|
+
- Invoker adapters for `function` are not wired yet (EP-API-2c); until then functions are composed inside
|
|
87
|
+
subgraphs, not invoked standalone through the API. Still register + manifest it.
|
|
88
|
+
|
|
89
|
+
### model — a trained checkpoint behind a seam
|
|
90
|
+
- **Home:** a GENERIC engine model capability lives in `capabilities/` (e.g. `capabilities/jev_decision.py`); a
|
|
91
|
+
domain model (e.g. the reference pack's SetFit clause classifier and 29-dim property fleet) lives with its pack,
|
|
92
|
+
in the reference pack (`rag_wright.packs.contracts.spans.model_capabilities`) for the engine's worked example, or in
|
|
93
|
+
your product repo. Load the checkpoint ONCE and cache it (the fleet is heavy).
|
|
94
|
+
- Serve behind the existing seam/adapter so nothing upstream changes (to FIND where a model cap belongs, use the
|
|
95
|
+
`classifier-opportunity-analysis` skill; to BUILD/train + checkpoint + serve it, the `setfit` skill). The impl_ref
|
|
96
|
+
factory is `def <slug>(resources, inputs)` for a SYNC impl (CPU-bound local inference — a classifier/XGBoost
|
|
97
|
+
checkpoint; `resources` ignored) or `async def <slug>(resources, inputs)` for an ASYNC impl (I/O-bound — an
|
|
98
|
+
LLM-backed model cap calling OpenRouter / a local vLLM client). `invoke_model` runs a sync impl and REFUSES an
|
|
99
|
+
async one; `ainvoke_model` (EP-API-7) off-loads a sync impl with `asyncio.to_thread` and awaits an async impl
|
|
100
|
+
directly, with an optional `sem` for fan-out backpressure.
|
|
101
|
+
|
|
102
|
+
### agent_skill — authored SKILL.md + the Deep Agents runtime
|
|
103
|
+
- **Home:** `skills/<slug>/SKILL.md` (generic) or `packs/<pack>/skills/<slug>/SKILL.md` (domain, e.g.
|
|
104
|
+
`packs/compliance/skills/compliance_judgment/SKILL.md`) + the agent runtime (e.g. `skills/rlm/`). It is LOADED (progressive
|
|
105
|
+
disclosure), not called: no `ResponseBounds`. Declare `requires=(...)` for a closure over other skills and
|
|
106
|
+
`skill_runtime` for its intrinsic runtime.
|
|
107
|
+
|
|
108
|
+
### mcp_tool — a capability exposed over MCP
|
|
109
|
+
- A distinct ARD identity (`<slug>_mcp`) for the same underlying capability exposed as a cross-agent MCP tool.
|
|
110
|
+
Prefer the generic `build_capability_mcp` (surface 4b); author a bespoke server only for a curated typed
|
|
111
|
+
signature (the reference pack's are in `packs/contracts/mcp/` and `packs/compliance/mcp/`, e.g.
|
|
112
|
+
`packs/compliance/mcp/compliance_server.py`). Bind the store server-side (issue 0035) — the tool never takes a tenant/store argument.
|
|
113
|
+
|
|
114
|
+
## Verify (the guardrail)
|
|
115
|
+
|
|
116
|
+
**In a product**, the engine's guardrail tests are not yours to run; write the equivalent for your own pack: load
|
|
117
|
+
it with `load_pack("<your pack module>")` in a test, then for each of your manifests assert the slug is in
|
|
118
|
+
`capability_index()` with the kind you declared, and resolve and call its `impl_ref` (`capability_impl(slug)`, from
|
|
119
|
+
`rag_wright.pack_sdk`) with a small input. The rest of this section is the engine's own guardrail.
|
|
120
|
+
|
|
121
|
+
**In the engine repo**, run `uv run pytest tests/capabilities/test_authoring_contract.py tests/capabilities/test_manifests.py
|
|
122
|
+
tests/capabilities/test_registry.py tests/arch/test_import_contracts.py` after authoring. It pins the contract this
|
|
123
|
+
skill teaches: no manifest under a non-canonical slug; the reserved-without-manifest set is a fixed allowlist (so
|
|
124
|
+
adding a slug but forgetting its manifest FAILS here); every manifest kind is a real ARD kind; every cap that declares
|
|
125
|
+
an `impl_ref` is a canonical slug with a manifest of the matching kind. The guardrail does not import the
|
|
126
|
+
`impl_ref` itself: add a test of your own that resolves it with `capability_impl(slug)` and calls it (the reference
|
|
127
|
+
pack's is `tests/spans/test_model_capabilities.py`). If you deliberately add a reserved/internal slug (no manifest),
|
|
128
|
+
add it to `_RESERVED_WITHOUT_MANIFEST` with a one-line reason. The engine's `tests/conftest.py` loads the reference
|
|
129
|
+
pack, so these tests see its slugs.
|
|
130
|
+
|
|
131
|
+
**The import boundary (engine repo).** `pyproject.toml` `[tool.importlinter]` has three forbidden contracts: every
|
|
132
|
+
generic engine package (`source_modules`: `rag_wright.api`, `capabilities`, `contracts`, `corpus`, `ingestion`,
|
|
133
|
+
`models`, `ontology`, `pack_sdk`, `skills`, `spans`, `store`, `subgraphs`, `util`) must never import
|
|
134
|
+
`rag_wright.packs`; pack code (`rag_wright.packs`) imports only `rag_wright.api` and `rag_wright.pack_sdk` (plus
|
|
135
|
+
itself), never another engine package directly; and `rag_wright.packs.contracts` must never import
|
|
136
|
+
`rag_wright.packs.compliance`. A pack capability's code therefore takes its building blocks from those two tiers. A new generic top-level package
|
|
137
|
+
goes in the first contract's `source_modules`; a new module inside an existing package or inside `rag_wright.packs`
|
|
138
|
+
needs no edit. `tests/arch/test_import_contracts.py` enforces all three.
|
|
139
|
+
|
|
140
|
+
**The network guard.** `tests/conftest.py` fails any test that resolves a non-local host unless it carries a live
|
|
141
|
+
marker (`model`, `store`, `parse`, `embed`, `rerank`, `ner`, `fleet`). Mock model and HTTP calls in unit tests, or
|
|
142
|
+
mark the test live.
|
|
143
|
+
|
|
144
|
+
## Common mistakes
|
|
145
|
+
|
|
146
|
+
- Adding the slug but forgetting the manifest (slug becomes silently un-discoverable) — the guardrail catches it.
|
|
147
|
+
- An impl_ref factory that reaches env/globals instead of the `WorkspaceHandle` — breaks multi-workspace use; build
|
|
148
|
+
everything from `resources`.
|
|
149
|
+
- A heavy import at the top of an impl_ref factory module that something light imports (a pack's `register()`
|
|
150
|
+
module, `rag_wright.api`): it inflates the light index; import inside the factory body.
|
|
151
|
+
- Declaring `response_bounds` on an `agent_skill` (constructing that `CapabilityManifest` raises `ValueError`: the
|
|
152
|
+
bounds apply only to callable kinds, and a skill is loaded, not called).
|
|
153
|
+
- Inventing a kind. If a capability fits none of the five, flag it — do not force-fit.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: building-an-ingestion-capability
|
|
3
|
+
description: >-
|
|
4
|
+
How to build a NEW domain's ingestion on the RAG_Wright engine with `build_ingestion`: decide what one extraction
|
|
5
|
+
UNIT is in your documents, write the one required hook (the extractor) and only the optional hooks you need,
|
|
6
|
+
declare the record types in your pack `.ttl`, tune the default hooks with `evaluate_ingestion` on your own sample
|
|
7
|
+
documents, and handle spreadsheets, tables and embedded files. Use it when a product or domain pack needs to turn
|
|
8
|
+
its documents into a cited knowledge graph, or when an ingestion result looks wrong (units too big, tables split,
|
|
9
|
+
records uncited). Grounded in ADR-0124 and the generated API reference (`docs/api/`).
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Building an ingestion capability
|
|
13
|
+
|
|
14
|
+
The engine owns the ingestion MECHANISM; a domain supplies one function, the extractor, plus any optional hook whose
|
|
15
|
+
default does not fit. Everything named here is imported from `rag_wright.api` (the generated `docs/api/README.md` has
|
|
16
|
+
every signature). The decision record is ADR-0124 (`docs/adr/0124-generic-ingestion-builder-and-hooks.md`).
|
|
17
|
+
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.
|
|
18
|
+
|
|
19
|
+
## 1. Who owns which stage
|
|
20
|
+
|
|
21
|
+
| stage | owner | default (engine) | override with |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| parse (PDF, Office, spreadsheets incl. hidden sheets, HTML, Markdown; embedded files) | engine | docling, content-hash cached | (none) |
|
|
24
|
+
| chunk | engine default, domain may override | structural boundaries; a model refines only an over-cap section (domain-neutral prompt) | `chunk_model=`, `chunk_discoverer=` (e.g. `default_chunk_discoverer(guidance=...)` to say what a coherent unit is in your documents) |
|
|
25
|
+
| segment a chunk into spans | engine default, domain may override | layout-driven: a table row per span, sentences for prose, a heading joins what follows | `segmenter=` |
|
|
26
|
+
| tag spans (soft tags) | domain, optional | none | `span_tagger=` (to compare models behind it, see section 5 of `docs/domain-adaptation/classification-and-decision-models.md`) |
|
|
27
|
+
| index spans (embed + store, page/bbox provenance) | engine | the workspace's ingest embedder | `embedder=` |
|
|
28
|
+
| group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
|
|
29
|
+
| choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
|
|
30
|
+
| extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
|
|
31
|
+
| write records | engine default | `kg_write` | `writer=` |
|
|
32
|
+
| per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
|
|
33
|
+
| `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
|
|
34
|
+
|
|
35
|
+
Every hook's output is checked by the engine, default or override alike: `check_tiling` (spans tile the chunk text,
|
|
36
|
+
ids `<chunk_id>#<index>`), `check_units` (known spans, each once, in order), `check_extraction` (provenance, below).
|
|
37
|
+
A unit whose extraction fails is recorded in the report and skipped; a document that fails is dead-lettered; the run
|
|
38
|
+
goes on.
|
|
39
|
+
|
|
40
|
+
## 2. Decide what ONE unit is (before writing code)
|
|
41
|
+
|
|
42
|
+
The unit is the text one extractor call reads. Get it right first; every other choice follows.
|
|
43
|
+
|
|
44
|
+
- Ask: "one record in my domain comes from ... ?" A section under a heading (a report, a policy) -> the default
|
|
45
|
+
grouper already does this. One table row (a register, a test log) -> the default treats a DATABASE-style table
|
|
46
|
+
(named, distinct header columns plus a serial first column or many columns) as one unit per row, and sets
|
|
47
|
+
`Unit.table_row` with exact cell values; force it per document with `IngestSource(table_mode="record")`, or keep
|
|
48
|
+
tables whole with `"block"`. A form (fields of ONE record) -> one unit (`auto` keeps a form grid whole).
|
|
49
|
+
- Units are capped at `IngestionTuning.max_unit_chars` (default 6000); a split table repeats its header row in each
|
|
50
|
+
continuation unit.
|
|
51
|
+
- A source is a file path or uploaded bytes: `IngestSource(path=...)`, or `IngestSource(data=..., name=...)` (the
|
|
52
|
+
name's extension picks the format), so an upload from object storage needs no temp file.
|
|
53
|
+
- If your documents mark units in a way layout does not show (a numbering scheme, a domain heading convention),
|
|
54
|
+
override `unit_grouper=` or pass a `boundary_decider=` (candidate line texts -> "starts a new unit?" per text) to
|
|
55
|
+
settle the lines the default grouper is unsure of. Domain conventions belong in your pack, never in the engine.
|
|
56
|
+
- **Decide which span REPRESENTS a unit** (`unit_representative=`, a `UnitRepresentative`: the unit's member spans,
|
|
57
|
+
with their tags -> the one that represents it). The chosen span becomes `unit.anchor` (the citation your records
|
|
58
|
+
carry, `span_id = unit.anchor.span_id`) and its primary tag leads `unit.tags` (the label your extractor reads).
|
|
59
|
+
Without it a unit is represented by its first member, which is usually its heading: the weakest text to tag and a
|
|
60
|
+
poor citation. The reference contracts pack passes `provision_vote` (ADR-0126): the label with the highest
|
|
61
|
+
probability summed over the non-heading members, cited by the member most confident in it; on 510 CUAD contracts
|
|
62
|
+
that beat heading-first by about 10 points. Measure your own rule on a gold set of your documents before choosing
|
|
63
|
+
it (the creating-evals skill).
|
|
64
|
+
|
|
65
|
+
## 3. Declare your record types in the pack `.ttl`
|
|
66
|
+
|
|
67
|
+
The store creates only the types a pack declares (ADR-0066: schema lives in the ontology, not in code). A record type
|
|
68
|
+
needs `span_id` and `confidence` properties to carry provenance:
|
|
69
|
+
|
|
70
|
+
```turtle
|
|
71
|
+
@prefix eng: <https://ragwright.local/ontology/engine#> .
|
|
72
|
+
@prefix my: <https://example.org/my-domain#> .
|
|
73
|
+
|
|
74
|
+
my:SectionNode a eng:KgVertexType ; eng:vertexName "Section" ;
|
|
75
|
+
eng:kgProperty "section_id:STRING", "title:STRING", "span_id:STRING", "confidence:STRING" ;
|
|
76
|
+
eng:uniqueIndexOn "section_id" .
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Point the workspace at it with `EngineConfig(pack="<path to your .ttl>")`; `open_workspace` then creates these types
|
|
80
|
+
on top of the neutral engine types. Writing a type the pack does not declare fails.
|
|
81
|
+
|
|
82
|
+
## 4. Write the extractor, tune, ingest
|
|
83
|
+
|
|
84
|
+
The extractor turns one `Unit` into a `UnitExtraction` of `KgNode` / `KgEdge` records. Provenance rule
|
|
85
|
+
(`check_extraction`): a fact node or edge carries `span_id` (a span of THIS unit, e.g. `unit.anchor.span_id`) and
|
|
86
|
+
`confidence` (`EXTRACTED`, `INFERRED` or `AMBIGUOUS`); nodes without `span_id` are shared vocabulary; a non-empty
|
|
87
|
+
extraction must cite at least once. Run `evaluate_ingestion` on your OWN sample documents before trusting the
|
|
88
|
+
defaults; it needs no store and makes no model calls.
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
import asyncio
|
|
92
|
+
import os
|
|
93
|
+
|
|
94
|
+
from rag_wright.api import (
|
|
95
|
+
EngineConfig, IngestionTuning, IngestSource, KgNode, StoreConfig, UnitExtraction, build_ingestion,
|
|
96
|
+
evaluate_ingestion, open_workspace,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
PACK_TTL = "my_domain/pack.ttl"
|
|
100
|
+
SAMPLES = ["samples/report.pdf"]
|
|
101
|
+
CORPUS = "my_domain"
|
|
102
|
+
CACHE = "data/cache/my_domain"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
async def extract(unit, *, source_doc_id):
|
|
106
|
+
"""One unit -> its records, each citing a span of the unit."""
|
|
107
|
+
title = unit.text.strip().splitlines()[0][:200]
|
|
108
|
+
return UnitExtraction(nodes=[KgNode("Section", "section_id", {
|
|
109
|
+
"section_id": f"{source_doc_id}:{unit.index}", "title": title,
|
|
110
|
+
"span_id": unit.anchor.span_id, "confidence": "EXTRACTED"})])
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
tuning = IngestionTuning(max_unit_chars=6000)
|
|
114
|
+
evaluation = evaluate_ingestion(SAMPLES, cache_dir=CACHE, tuning=tuning)
|
|
115
|
+
print("evaluation passed:", evaluation.passed, evaluation.failures)
|
|
116
|
+
|
|
117
|
+
ws = open_workspace(EngineConfig(store=StoreConfig(
|
|
118
|
+
host=os.environ["ARCADEDB_HOST"], port=os.environ["ARCADEDB_PORT"],
|
|
119
|
+
user=os.environ["ARCADEDB_USER"], password=os.environ["ARCADEDB_PASSWORD"]), pack=PACK_TTL), corpus=CORPUS)
|
|
120
|
+
pipeline = build_ingestion(extract, tuning=tuning)
|
|
121
|
+
report = asyncio.run(pipeline.aingest(ws, [IngestSource(path=p) for p in SAMPLES], cache_dir=CACHE))
|
|
122
|
+
print(report.succeeded, "ingested,", report.failed, "dead-lettered")
|
|
123
|
+
for doc in report.documents:
|
|
124
|
+
print(doc.doc_id, doc.units, "units,", doc.records, "records,", doc.extraction_failures)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Iterate on `evaluation.failures` (and the `DocumentEvaluation` measures: `tables_whole`, `headings_start_units`,
|
|
128
|
+
`coverage`, `cap_ok`, ...) by changing `IngestionTuning` before you override a hook. Keep `extract` async and
|
|
129
|
+
network-bound work inside it; the engine runs up to `IngestionTuning.extract_concurrency` units at once.
|
|
130
|
+
|
|
131
|
+
## 5. Spreadsheets, tables and embedded files
|
|
132
|
+
|
|
133
|
+
- **Hidden sheets** are ingested by default; `IngestSource(include_hidden_sheets=False)` skips them (listed in
|
|
134
|
+
`DocumentReport.skipped_hidden_sheets`).
|
|
135
|
+
- **Exact cell values**: `table_rows(parse_document(...))` returns every data row as a `TableRow` (`columns`,
|
|
136
|
+
`values`, `cell(name)`), read from the parse's cell grid, whole even when chunking split the table. A per-row unit
|
|
137
|
+
carries its row in `Unit.table_row`, so the extractor reads cells, not re-parsed text.
|
|
138
|
+
- **Embedded files and PDF attachments** (an Office package's embedded workbook or PDF, a PDF's attached files) are
|
|
139
|
+
ingested as CHILD documents through the same pipeline: each gets its own `Document` node and an `EmbeddedIn` edge
|
|
140
|
+
to its parent, and an `AttachedTo` edge from the child to the table-row span it belongs to, with a confidence and
|
|
141
|
+
the identifier evidence (`IngestionTuning.identifier` sets what counts as an identifier). The report lists them in
|
|
142
|
+
`DocumentReport.children`, `links` and `unmapped_links`.
|
|
143
|
+
|
|
144
|
+
## 6. Verify (definition of done)
|
|
145
|
+
|
|
146
|
+
1. `evaluate_ingestion` passes on a representative sample of YOUR documents (not a hand-picked easy one).
|
|
147
|
+
2. A live ingest of that sample: no dead letters, `extraction_failures` explained, records cite spans
|
|
148
|
+
(`kg_read(ws, "<your type>", fields=["span_id"])`), and `span_positions(ws, doc_id)` gives the citation positions.
|
|
149
|
+
3. A hermetic test of your extractor on fixed units (no model calls in the default suite; the engine's test network
|
|
150
|
+
guard fails any unmarked test that reaches the network).
|
|
151
|
+
4. If the extractor calls a model, meter it: run the ingest inside `measure_usage()` and check the call count and
|
|
152
|
+
cost per document before a bulk run.
|
|
153
|
+
|
|
154
|
+
## Anti-patterns
|
|
155
|
+
|
|
156
|
+
- Putting domain rules (section words, abbreviations, value lists) in Python: they belong in your pack `.ttl`.
|
|
157
|
+
- Overriding the segmenter or grouper before `evaluate_ingestion` shows the default fails on your documents.
|
|
158
|
+
- An extractor that returns records without `span_id`, or cites a span outside its unit (the run reports it as an
|
|
159
|
+
extraction failure, and the records are not written).
|
|
160
|
+
- Re-parsing table text with regexes when `Unit.table_row` / `table_rows` already give the exact cells.
|
|
161
|
+
- Importing engine internals (`rag_wright.ingestion.*`, `rag_wright.store.*`): everything here is on `rag_wright.api`.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: classifier-opportunity-analysis
|
|
3
|
+
description: >-
|
|
4
|
+
Structured guide for ANALYZING a domain's ingestion + retrieval pipeline to find where an LLM call can be
|
|
5
|
+
replaced by a deterministic rule, a trained classifier, or a routing decision. Use it BEFORE building or
|
|
6
|
+
refactoring a domain pack, when an LLM is doing per-unit work that multiplies over a document, or when
|
|
7
|
+
onboarding a new domain — it is the identification/decision step upstream of `setfit` (which BUILDS the
|
|
8
|
+
classifier) and `authoring-a-capability` (which REGISTERS it as a capability). It captures the recipe applied
|
|
9
|
+
twice (contracts, then compliance) so the next domain is mapped the same way instead of re-derived.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Finding classifier / routing opportunities in a pipeline
|
|
13
|
+
|
|
14
|
+
This is an **analysis** skill: its output is a decision — an *opportunity list / decomposition plan*, not code and
|
|
15
|
+
not a trained model. It answers "where in this domain's ingestion and retrieval does a classifier, a routing
|
|
16
|
+
decision, or a deterministic rule belong, and where must the LLM stay?" Build what it identifies with the `setfit`
|
|
17
|
+
skill, serve the teacher with `qwen-vllm-modal`, and register each result as a capability with
|
|
18
|
+
`authoring-a-capability`.
|
|
19
|
+
|
|
20
|
+
## The core pattern (why this works, and why we have done it twice)
|
|
21
|
+
|
|
22
|
+
A per-unit "do everything" LLM extraction is almost never one decision. It is a **bundle of separable decisions**
|
|
23
|
+
wearing one prompt. Decomposed, most of the bundle is not LLM-shaped work:
|
|
24
|
+
|
|
25
|
+
- **boundaries** (where does a unit start / is this span worth extracting) are usually structural → deterministic;
|
|
26
|
+
- **closed-vocab tags** (the type, the role, the dimension values) are classification → a classifier, or a
|
|
27
|
+
deterministic cue-rule when the cues are enumerable;
|
|
28
|
+
- only the **genuinely open part** (numbers, free text, synthesis) needs an LLM, and then only **one residual call
|
|
29
|
+
per unit**.
|
|
30
|
+
|
|
31
|
+
Worked precedent in this engine:
|
|
32
|
+
|
|
33
|
+
| | Contracts (decomposed) | Compliance (the CIC arc) |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| Unit boundaries | deterministic (section numbering / headings) + a decision-model residue decider (one batched `noul` call for the uncertain lines; ADR-0122) | deterministic operative-rule spans + one `jev_decision` call per span for the operative gate (the default `extraction_backend="jev"`) |
|
|
36
|
+
| Closed-vocab tags | the 21-dim / 29-dim classifier fleet | deontic cue-rule + actor / claim-types in that same per-span Jev call |
|
|
37
|
+
| Open / numeric field | deterministic candidate spans + one Jev `choice` call per provision with candidates (none without); the LLM only as fallback (`RAG_RESIDUAL_EXTRACTOR=llm`). Value recall / precision 0.83 / 0.88 vs the LLM's 0.60 / 0.79 | applicability + evidence standard: one gated residual LLM call, only for a rule with a conditional or evidence cue (most skip it); the `"docling"` fallback keeps one LLM extraction per section |
|
|
38
|
+
| Extraction judge | the Layer-3 judge on Jev: one batched call per provision, 95.3% vs the LLM judge's 90.1% (192 blind hand-labelled cases); `RAG_SEMANTIC_JUDGE=llm` opts out | (none) |
|
|
39
|
+
| Text of the record | verbatim span | verbatim span (was a paraphrase) |
|
|
40
|
+
| Structure / graph extraction | once per document (parties), keep the LLM | once per document, keep the LLM |
|
|
41
|
+
|
|
42
|
+
Cost shape (live, 131 provisions of one contract): 215 Jev calls, 0 LLM calls, $0.013, against 277 calls (276 of them
|
|
43
|
+
LLM) and $0.277 on the LLM path (ADR-0040, ING-9 / ING-9b addendum). One batched call per unit is the shape to aim for.
|
|
44
|
+
|
|
45
|
+
The pattern is domain-independent. What changes per domain is the vocabulary and the document structure — which is
|
|
46
|
+
exactly what the phases below make you look at.
|
|
47
|
+
|
|
48
|
+
## Phase A — Map the pipeline as per-unit decisions
|
|
49
|
+
|
|
50
|
+
Enumerate every LLM call and, for each, its **unit** and how the unit COUNT scales:
|
|
51
|
+
|
|
52
|
+
- per **document** (parse, a party/graph-structure pass) — count ≈ corpus size; cheap per doc.
|
|
53
|
+
- per **section / chunk / segment / span** — count scales with **document length**. A 100-page document is
|
|
54
|
+
thousands of these. **This is where the cost lives and where decomposition pays.**
|
|
55
|
+
- per **query** / per **candidate** / per **(claim, requirement) pair** — query-time; count ≈ traffic, usually a
|
|
56
|
+
few per request (see Phase D).
|
|
57
|
+
|
|
58
|
+
Two things to separate immediately:
|
|
59
|
+
|
|
60
|
+
1. **Structure / connection extraction** (entities, parties, graph edges — "who/what is in this document and how is
|
|
61
|
+
it connected") is a **once-per-document** pass. It is NOT the per-unit cost; leave the LLM there. Do not mistake
|
|
62
|
+
it for the thing to decompose. (In this engine that is the docling-graph pass; it runs once per contract and once
|
|
63
|
+
per regulation.)
|
|
64
|
+
2. **Per-unit semantic tagging** (what IS this unit, what are its typed properties) is the multiplying cost. This is
|
|
65
|
+
the target.
|
|
66
|
+
|
|
67
|
+
## Phase B — Classify each decision by its shape, then pick the mechanism
|
|
68
|
+
|
|
69
|
+
For every per-unit decision, name its shape. The shape dictates the mechanism, in this order of preference (cheapest
|
|
70
|
+
and most robust first):
|
|
71
|
+
|
|
72
|
+
1. **Boundary / segmentation** — "does a new unit start here?", "is this span operative / extractable?" →
|
|
73
|
+
**deterministic structure first** (numbering, enumeration `(a)(b)`, headings, list markers). Add a small
|
|
74
|
+
**binary classifier** only for the residue where structure is ambiguous (the analog of a `is_extractable_span`
|
|
75
|
+
model). Rarely needs an LLM.
|
|
76
|
+
2. **Closed-vocab with an enumerable cue list** — a value the ontology can map from a fixed set of trigger phrases
|
|
77
|
+
(e.g. a deontic type from "must / shall / may not") → a **deterministic cue-rule, NO ML**. Do this before
|
|
78
|
+
training anything; it is free and exact.
|
|
79
|
+
3. **Single-label routing** — one of a closed set, no clean cue list → a **classifier**.
|
|
80
|
+
4. **Multi-label soft-tagging** — several of a closed set, used as *guidance* not a gate → a **soft-tag classifier**
|
|
81
|
+
(top-k). The most forgiving shape; a modest-accuracy model is still useful because wrong extra tags are cheap.
|
|
82
|
+
5. **Verbatim vs generated text** — if the record just needs the unit's text, extract the **verbatim span**
|
|
83
|
+
(deterministic) rather than a generated paraphrase. Drops a generative LLM step and is more faithful for
|
|
84
|
+
citation. Keep a paraphrase only if a human-readable restatement is a real requirement.
|
|
85
|
+
6. **Open / numeric / free-text / synthesis**: no closed set. Often still not LLM work: **propose candidates
|
|
86
|
+
deterministically** (the numbers, amounts, durations in the unit), then a **decision model labels each
|
|
87
|
+
candidate's role** in one batched call per unit. Author the roles and their one-line criteria in the pack `.ttl`
|
|
88
|
+
(the reference pack's `cbr:ResidualRole` + `cbr:decisionCriterion`). Keep the LLM, as **one residual call per
|
|
89
|
+
unit**, only for values no candidate generator can propose.
|
|
90
|
+
7. **Pair / entailment / verdict**: rerank a candidate against a query, or a judge verdict over a (subject, rule)
|
|
91
|
+
pair → a **decision model** is a strong candidate (a verdict over a closed label set IS a classification), then
|
|
92
|
+
a **cross-encoder / NLI classifier**. The ingestion extraction judge moved to a decision model (ING-9). Often
|
|
93
|
+
query-time; see Phase D.
|
|
94
|
+
|
|
95
|
+
## Phase C — What to look for in the documents themselves
|
|
96
|
+
|
|
97
|
+
Signals that make decomposition **feasible** (push toward rules + classifiers):
|
|
98
|
+
|
|
99
|
+
- explicit **numbering / enumeration / heading** structure → deterministic boundaries;
|
|
100
|
+
- a **closed, ontology-authored vocabulary** for the typed fields → classifiers + cue-rules;
|
|
101
|
+
- **repeated template structure** across documents → stable features;
|
|
102
|
+
- **enumerable linguistic cues** (deontic verbs, defined terms, standard phrasings) → cue-rules.
|
|
103
|
+
|
|
104
|
+
Signals that **resist** it (keep the LLM): genuinely open / unbounded values, cross-document or multi-hop
|
|
105
|
+
reasoning, long-prose synthesis, values that depend on interpretation rather than surface form.
|
|
106
|
+
|
|
107
|
+
## Phase D — Ingestion vs retrieval: where the win actually is
|
|
108
|
+
|
|
109
|
+
- **Ingestion** per-unit work on long documents multiplies into thousands of calls. This is the **biggest, do-first**
|
|
110
|
+
opportunity. The whole Phase B decomposition applies.
|
|
111
|
+
- **Retrieval / query time** is typically a **few calls per request** (classify the query, extract its constraints,
|
|
112
|
+
rerank, judge). These ARE classifier/routing shapes (closed-set query routing, a pair-classifier reranker or
|
|
113
|
+
judge), but the volume is low and you often want the LLM's rationale or synthesis. It is legitimate to **live with
|
|
114
|
+
the LLM at query time** (as this engine does for the contract and compliance judges) and still decompose
|
|
115
|
+
ingestion fully. State this as a deliberate choice per decision; do not reflexively de-LLM query time.
|
|
116
|
+
|
|
117
|
+
## Phase E — Soft-tag vs hard-gate: decide the role before committing
|
|
118
|
+
|
|
119
|
+
The same classifier is safe or dangerous depending on how its output is used:
|
|
120
|
+
|
|
121
|
+
- a **soft tag** that only augments / hints → safe even at modest accuracy; wrong extra tags are cheap.
|
|
122
|
+
- a **hard gate** that drops, blocks, or routes irreversibly → needs high accuracy AND a safe fallback.
|
|
123
|
+
|
|
124
|
+
Decide the role first. Keep a **graceful-degrade path**: a classifier abstention or a persistent rule-miss should
|
|
125
|
+
fall back to the residual LLM (or to an explicit "ambiguous"), never to a silent wrong answer.
|
|
126
|
+
|
|
127
|
+
## Phase F — Make it ttl-driven, and know what transfers across domains
|
|
128
|
+
|
|
129
|
+
Author the closed vocabulary and the cue lists in the **ontology (`.ttl`), never in Python** (the engine's
|
|
130
|
+
knowledge-in-the-ontology rule). Then:
|
|
131
|
+
|
|
132
|
+
- the **deterministic mechanism** (structure split + cue-rule + verbatim extraction) is domain-generic and
|
|
133
|
+
**transfers to any pack for free** — it reads whatever vocab/cues the pack authors;
|
|
134
|
+
- a **trained classifier is vocabulary-specific** — a new-vocabulary domain pack trains **its own**. "Reuse across
|
|
135
|
+
products" therefore means the *same mechanism + per-pack models*, not one model everywhere.
|
|
136
|
+
- A pack that only re-routes an existing vocabulary at query time (an override overlay) is NOT a new-vocabulary pack
|
|
137
|
+
and needs no new ingestion classifier.
|
|
138
|
+
|
|
139
|
+
## The output: the opportunity list
|
|
140
|
+
|
|
141
|
+
Produce a decomposition plan, not prose:
|
|
142
|
+
|
|
143
|
+
1. **Headline the single biggest per-unit LLM cost** (the multiplying ingestion pass).
|
|
144
|
+
2. For **each decision** give: its unit, its shape (Phase B), the chosen mechanism (deterministic / cue-rule /
|
|
145
|
+
classifier / residual-LLM / verbatim), and its role (soft-tag vs gate).
|
|
146
|
+
3. Separate an **ingestion bucket** (do first) from a **query-time bucket** (decide case by case; often live with
|
|
147
|
+
the LLM).
|
|
148
|
+
4. Note the **ttl + per-pack** generality (what transfers, what each pack re-trains).
|
|
149
|
+
5. **Map each decision onto an ingestion hook** (`build_ingestion`, ADR-0124): a boundary decision →
|
|
150
|
+
`BoundaryDecider` / `UnitGrouper`; closed-vocab tags → `SpanTagger`; residual values and the judge → `Extractor`.
|
|
151
|
+
6. Exclude anything that is not actually a per-unit cost (once-per-document structure extraction) and anything
|
|
152
|
+
already settled (a decision an existing cue-rule covers).
|
|
153
|
+
|
|
154
|
+
## Hand-off (what to do with the opportunities)
|
|
155
|
+
|
|
156
|
+
- **Deterministic rule / cue-rule / span-split** → plain code in an ingestion hook (`Segmenter`, `UnitGrouper`,
|
|
157
|
+
`SpanTagger`, passed to `build_ingestion`). NOT a capability; it is mechanism, and the knowledge it reads lives in the `.ttl`.
|
|
158
|
+
- **System-1 decision model (NO training)** → for a closed-set decision (yes/no, choice, score), A/B a decision
|
|
159
|
+
model — **Jev** (managed, OpenRouter Decisions API, zero/few-shot, calibrated) or **Laya** (open, fine-tuned) —
|
|
160
|
+
BEFORE committing to a trained classifier. It often wins when data is scarce or label-ambiguous, or when you need
|
|
161
|
+
calibrated uncertainty to route/gate (measured: RAG_Wright CIC-1c — Jev zero-shot 0.92 vs a trained SetFit 0.82;
|
|
162
|
+
ADR-0119). See `setfit` Phase 0.5 (the decision-vs-train A/B) and the `laya` skill; wire it as a `jev_decision`-style
|
|
163
|
+
model capability with a `DecisionModelProfile`. **Evaluate this first; it may remove the need to train at all.**
|
|
164
|
+
The decision path runs only when `jev_decision` is registered (from `engine_capabilities()`) AND
|
|
165
|
+
`OPENROUTER_API_KEY` is set; otherwise the reference pack's decision paths degrade silently (to the deterministic
|
|
166
|
+
rule or the LLM), so check both before reading a number.
|
|
167
|
+
- **Trained classifier** → build it with the **`setfit`** skill (framing, symmetric leakage-safe eval, per-class
|
|
168
|
+
floor, soft-tag/top-k, rare-class curation, checkpointing). Serve the teacher / bulk-labeler with **`qwen-vllm-modal`**.
|
|
169
|
+
Then register it as a capability with **`authoring-a-capability`**: a `kind="model"` capability with an
|
|
170
|
+
`impl_ref` factory `def <slug>(resources, inputs)` over a cached checkpoint, invoked by name through the engine
|
|
171
|
+
API: from your ingestion hook, call `ainvoke_model(slug, inputs, resources=ws)`, **routed THROUGH the
|
|
172
|
+
capability layer, never hand-constructed around it.** A model impl may be sync (a classifier / XGBoost — run
|
|
173
|
+
off-loop by `ainvoke_model`) or async (an LLM-backed cap — awaited by `ainvoke_model`).
|
|
174
|
+
|
|
175
|
+
## Anti-patterns (from the real sessions — do not repeat)
|
|
176
|
+
|
|
177
|
+
- **Letting classifier training cost/time decide whether an opportunity exists.** Identify opportunities by the
|
|
178
|
+
*pattern* (per-unit closed-set decision on a long document); training ROI is a separate, later question.
|
|
179
|
+
- **Mistaking once-per-document structure extraction for the per-unit cost.** It is cheap; leave the LLM.
|
|
180
|
+
- **Claiming a judge/verdict step "can't classify."** A verdict over a closed label set (compliant / violation /
|
|
181
|
+
needs-review, relevant / not) IS a classification; it is a legitimate pair-classifier candidate (usually
|
|
182
|
+
query-time).
|
|
183
|
+
- **Hardcoding the vocabulary or cues in Python.** They belong in the `.ttl`; the mechanism reads them.
|
|
184
|
+
- **Training a classifier where an enumerable cue-rule already settles the decision** (the deontic-type case).
|
|
185
|
+
- **Forcing a hard gate where a soft tag suffices** — it imposes an accuracy bar you did not need.
|
|
186
|
+
- **Reflexively de-LLM'ing query time** — low volume + wanted rationale often make the LLM the right call there.
|
|
187
|
+
- **A router/cascade of specialists** — it multiplies errors (router acc × specialist acc). A flat classifier +
|
|
188
|
+
multi-tag usually beats it (see `setfit`).
|