rag-wright 0.17.0__tar.gz → 0.17.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +8 -3
- rag_wright-0.17.1/.release-please-manifest.json +3 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/CHANGELOG.md +7 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/CLAUDE.md +7 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/PKG-INFO +1 -1
- rag_wright-0.17.1/docs/adr/0142-the-default-writer-keeps-one-edge-per-type-and-endpoints.md +32 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/README.md +2 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/README.md +2 -2
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/pack_sdk.md +1 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/_engine-gaps.md +10 -7
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/kg-construction.md +5 -4
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/plan.md +1 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/pyproject.toml +1 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +8 -3
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/kg.py +4 -3
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/builder.py +5 -4
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/arcadedb.py +18 -4
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/seam.py +5 -2
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tasks.md +3 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_kg.py +1 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_builder.py +1 -1
- rag_wright-0.17.1/tests/ingestion/test_default_writer_ensures_edges.py +33 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_graph_parity.py +1 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_write_count.py +1 -1
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_schema.py +1 -1
- rag_wright-0.17.1/tests/store/test_kg_write_ensure_edges.py +142 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/uv.lock +1 -1
- rag_wright-0.17.0/.release-please-manifest.json +0 -3
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/settings.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.env.example +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/.gitignore +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/LICENSE +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/README.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/SPEC.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/conftest.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0140-one-model-family-on-metal.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/adr/0141-the-hard-split-cuts-between-lines-and-repeats-a-tables-header.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/api/harness.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/architecture.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/README.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/concepts.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/configuration.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/evals.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/harness.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/installation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/playbook.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/quickstart.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/reference-pack.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/releasing.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/evals/plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/langgraph-ingestion/plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/docs/workspaces.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/acord.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/build_golden.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/embedded_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_ceiling.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/function_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/golden.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/harness.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/kg_primary.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/multihop.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/nl_to_type.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/relational_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_acord.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_harness.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/examples/model_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/examples/quickstart.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/plan.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/release-please-config.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acord_unify.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/build_harness_doc.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/graph_status.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_harness_genericity.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/measure_silver.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/agents.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/api/workspace.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/parse_audit.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/parsing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/sheet_tables.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/span_search.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/evals.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/gold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/langfuse_backend.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/runner.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/evals/scorers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/accounting.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/agent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/batch.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/clarify.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/confirm.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/decisions.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/definition.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/dispatch.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/errors.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/events.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/filesystem.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/grading.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/interpreter.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/memory.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/models.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/rules.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/runs.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/scope.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/seen.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/skills.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/thinking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/tiers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/tracing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/withhold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/harness/workers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/devices.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/pdfium.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_agent_chat_model.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_agent_chat_model_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_api_embedder_ps39.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_discover.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_documents.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_drop_workspace.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_drop_workspace_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_migrate_span_fields.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_options.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_sdk_segmenter.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_pdf_page_count.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_public_gaps_ps38.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_tracing_helpers_ps32.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_usage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_lock_version.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_pdfium_door.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/arch/test_shipped_skills.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/async_helpers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parse_audit.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_span_search.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/conftest.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_gold_contracts.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_gold_import.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_langfuse_backend.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_runner.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorer_parity.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_a.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_b.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_c.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/evals/test_scorers_d.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_greenfield_conformance.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_accounting.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_engine_wiring.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_genericity.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_recorder.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/harness/test_harness_thinking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_aevaluate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_graph_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_sheet_continuations.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_split_tables.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ingestion/test_unreached_rows.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_event_loops.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/models/test_usage.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/scripts/test_generation_robustness_errors.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/test_creating_evals_skill_example.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_contains.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_identifiers.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_range.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_pack_schema_properties.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_pooled_client.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_store_create_flag.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_contract_write_retry.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/__init__.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_devices.py +0 -0
- {rag_wright-0.17.0 → rag_wright-0.17.1}/tests/util/test_spacy_model.py +0 -0
{rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/building-an-ingestion-capability/SKILL.md
RENAMED
|
@@ -199,7 +199,11 @@ category.
|
|
|
199
199
|
- **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
|
|
200
200
|
whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
|
|
201
201
|
`document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
|
|
202
|
-
mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key
|
|
202
|
+
mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
|
|
203
|
+
emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
|
|
204
|
+
(PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
|
|
205
|
+
off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
|
|
206
|
+
provenance).
|
|
203
207
|
- **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
|
|
204
208
|
saver; the engine ships none) and a `run_id` naming the run:
|
|
205
209
|
`await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
|
|
@@ -208,8 +212,9 @@ category.
|
|
|
208
212
|
sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
|
|
209
213
|
LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
|
|
210
214
|
- **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
|
|
211
|
-
key
|
|
212
|
-
|
|
215
|
+
key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
|
|
216
|
+
source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
|
|
217
|
+
provenance your records carry, such as a per-source property) and write again.
|
|
213
218
|
|
|
214
219
|
## 6. Verify (definition of done)
|
|
215
220
|
|
|
@@ -4,6 +4,13 @@ All notable changes to RAG_Wright are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.17.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.17.0...0.17.1) (2026-11-07)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* **PS-63:** the default record writer keeps one edge per type and endpoints (G8) ([e77ca91](https://github.com/fzaidi-dai/RAG_Wright/commit/e77ca9151e8cd5a425237f30ada721349eac7bb0))
|
|
13
|
+
|
|
7
14
|
## [0.17.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.1...0.17.0) (2026-11-05)
|
|
8
15
|
|
|
9
16
|
|
|
@@ -55,7 +55,13 @@ The failure mode to avoid, which has happened before: a command fails with "modu
|
|
|
55
55
|
|
|
56
56
|
## Start of every session
|
|
57
57
|
|
|
58
|
-
> **CURRENT STATE (2026-11-
|
|
58
|
+
> **CURRENT STATE (2026-11-07): PS-63 done, unreleased** (TexWright's G8 request: the default record writer keeps one
|
|
59
|
+
> edge per type and endpoints, `kg_write(..., ensure_edges=True)`, ADR-0142). Next: PS-48, EV-7, PS-30, PS-33. Before it,
|
|
60
|
+
> **`rag-wright` 0.17.0 is RELEASED** (PR #21; TexWright's request: PS-60 a table over
|
|
61
|
+
> the chunk cap is split between lines with its header repeated, so every row keeps its span and `TableRow` (ADR-0141);
|
|
62
|
+
> PS-61 the default segmenter `segment_layout` is on `pack_sdk`; PS-62 a record table's rows that reach no unit are
|
|
63
|
+
> reported, `DocumentReport.unreached_table_rows`). Next: PS-48, EV-7, PS-30, PS-33. Before it,
|
|
64
|
+
> **`rag-wright` 0.16.1 is RELEASED** (PR #20; RuleWright's two requests and a finding
|
|
59
65
|
> from them: PS-57 a retried contracts-pack write no longer loses a document's clauses, the ArcadeDB conflict budget is
|
|
60
66
|
> configurable (default 20 attempts / 2 s cap) and a racing UPSERT's duplicate key is retried; PS-58 a `RecordWriter`
|
|
61
67
|
> returns the count that landed; PS-59 the store's client keeps keep-alive connections, one session per thread). Next:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.1
|
|
4
4
|
Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
|
|
6
6
|
Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# ADR-0142: The default record writer keeps one edge per type and endpoints
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-11-07 · **Related:** PS-63, engine gap G8, TexWright's request
|
|
4
|
+
`2026-10-15-g8-duplicates-edges-within-one-ingest.md`, ADR-0124 (ING-4b `kg_ensure_edges`), issue 0029
|
|
5
|
+
(`outV()`/`inV()` endpoint filters)
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
With no `writer=`, `build_ingestion` wrote records with `kg_write`: nodes upserted by key, edges created with a plain
|
|
10
|
+
`CREATE EDGE`. The engine's own guidance has an entity several units mention emitted by its key from each unit, so
|
|
11
|
+
each such unit also emitted the edge to it, and that edge landed once per unit, within one ingest and again on every
|
|
12
|
+
re-ingest. Node counts stayed right, so only a traversal showed it (TexWright: 3 children read back as 6). The
|
|
13
|
+
store's idempotent `kg_ensure_edges` runs a query and a write per edge outside any transaction, and scans the edge
|
|
14
|
+
type for each edge.
|
|
15
|
+
|
|
16
|
+
## Decision
|
|
17
|
+
|
|
18
|
+
- `Store.kg_write` takes `ensure_edges` (default `False`). When true, an edge is identified by its type and its two
|
|
19
|
+
endpoints (direction counts): the batch keeps each edge's last props; each edge is an index-driven `UPDATE` of an
|
|
20
|
+
existing one, reached through `outE` from its indexed from node, then `CREATE EDGE ... IF NOT EXISTS`, all in the
|
|
21
|
+
write's one transaction under the same conflict retry. ArcadeDB 26.7 was probed live: `IF NOT EXISTS` holds within
|
|
22
|
+
one transaction, across transactions and across concurrent writers.
|
|
23
|
+
- The ingestion default writer passes `True`; `rag_wright.api.kg_write` exposes the flag for a domain's own writer.
|
|
24
|
+
- Without the flag `kg_write` is unchanged: a caller whose parallel edges each carry their own provenance (the
|
|
25
|
+
reference pack's clause-to-value assertions, RuleWright's writer) keeps them.
|
|
26
|
+
|
|
27
|
+
## Consequences
|
|
28
|
+
|
|
29
|
+
- An edge several units emit, or a re-ingest writes again, lands once with the last unit's props; G8 is closed.
|
|
30
|
+
- A domain that means parallel edges of one type between the same two nodes, and uses the default writer, now gets
|
|
31
|
+
one; it passes a `writer=` that calls `kg_write` without the flag.
|
|
32
|
+
- A re-ingest still does not remove records a document no longer yields. `kg_ensure_edges` is unchanged.
|
|
@@ -197,4 +197,5 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
|
|
|
197
197
|
0138 PDF parses run one at a time, and the engine reaches pdfium through one locked door ·
|
|
198
198
|
0139 The agent harness substrate is engine scope ·
|
|
199
199
|
0140 One model family on Metal, under one process lock ·
|
|
200
|
-
0141 The cap's hard split cuts between lines and repeats a table's header
|
|
200
|
+
0141 The cap's hard split cuts between lines and repeats a table's header ·
|
|
201
|
+
0142 The default record writer keeps one edge per type and endpoints
|
|
@@ -430,9 +430,9 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
|
|
|
430
430
|
|
|
431
431
|
Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence), a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`) or a `Contains` (a literal substring, case-insensitive unless `case_sensitive=True`; an empty field never matches: `{"composition": Contains("UHMWPE")}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit. Every name is checked, never interpolated unchecked (the module docstring): a request-chosen field is safe, but an unknown one matches nothing.
|
|
432
432
|
|
|
433
|
-
### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
|
|
433
|
+
### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = (), *, ensure_edges: 'bool' = False) -> 'None'`
|
|
434
434
|
|
|
435
|
-
Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write.
|
|
435
|
+
Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are `KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per (type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer.
|
|
436
436
|
|
|
437
437
|
### `kg_edges(ws: 'WorkspaceHandle', from_type: 'Optional[str]' = None, *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None, direction: 'str' = 'out', edge_type: 'Optional[str]' = None, edge_where: 'Optional[dict]' = None, target_where: 'Optional[dict]' = None, select: 'dict') -> 'list[dict]'`
|
|
438
438
|
|
|
@@ -182,7 +182,7 @@ Group into units (checked), attach table rows, extract each unit concurrently (p
|
|
|
182
182
|
|
|
183
183
|
#### `IngestionStages.write(self, sd: 'Any', extractions: 'list') -> 'int'`
|
|
184
184
|
|
|
185
|
-
Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
|
|
185
|
+
Persist the records (the domain's writer, else `kg_write` with idempotent edges). Returns the number that landed: the writer's own count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one transaction (it raises rather than land part of them).
|
|
186
186
|
|
|
187
187
|
#### `IngestionStages.write_document_node(self, doc_id: 'str', *, parent_id: 'Optional[str]', filename: 'str', media_type: 'str', sha256: 'str', metadata: 'Optional[dict]' = None) -> 'None'`
|
|
188
188
|
|
|
@@ -53,13 +53,16 @@ they are the real "does a new customer benefit?" items. The genuine engine ones
|
|
|
53
53
|
- **Proposed:** a generic reader in `ontology.pack_schema` (or similar) over an engine-namespaced criterion
|
|
54
54
|
vocabulary.
|
|
55
55
|
|
|
56
|
-
### G8: The default record writer is not fully idempotent
|
|
57
|
-
- **Where:** with no `writer=`, `build_ingestion`
|
|
58
|
-
but edges
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **
|
|
56
|
+
### G8: The default record writer is not fully idempotent (closed by PS-63)
|
|
57
|
+
- **Where:** with no `writer=`, `build_ingestion` wrote with the store's `kg_write`: nodes were upserted by their key,
|
|
58
|
+
but edges were created (`CREATE EDGE`).
|
|
59
|
+
- **Impact:** not only a re-ingest. Within ONE ingest of one document, an edge that several units emit (an entity
|
|
60
|
+
several rows mention, emitted by its key from each unit) landed once per unit, so a traversal over-counted while
|
|
61
|
+
node counts looked right (TexWright, 2026-10-15).
|
|
62
|
+
- **Closed by PS-63 (ADR-0142):** the default writer calls `kg_write(..., ensure_edges=True)`: at most one edge per
|
|
63
|
+
(type, from node, to node), within the write, across writes and across concurrent writers, the last props landing,
|
|
64
|
+
in the same one transaction. A domain `writer=` gets the same with `rag_wright.api.kg_write(ws, nodes, edges,
|
|
65
|
+
ensure_edges=True)`; without the flag `kg_write` still keeps parallel edges.
|
|
63
66
|
|
|
64
67
|
### G9: One domain pack per workspace through the public API
|
|
65
68
|
- **Where:** `EngineConfig.pack` takes one `.ttl`. A second pack's schema needs the store-internal
|
|
@@ -221,10 +221,11 @@ ask-first change.
|
|
|
221
221
|
citation**.
|
|
222
222
|
- **What is cached on a re-ingest:** in `build_ingestion`, parse and chunk are content-hash cached; spans,
|
|
223
223
|
record nodes and the `Document` node are upserted by key; the `EmbeddedIn` / `AttachedTo` edges are ensured (never
|
|
224
|
-
duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive)
|
|
225
|
-
default writer
|
|
226
|
-
|
|
227
|
-
(
|
|
224
|
+
duplicated). Extraction runs again on every ingest (cache inside your extractor if it is expensive). The
|
|
225
|
+
default writer ensures record edges too (PS-63): one edge per (type, from node, to node), whether several units
|
|
226
|
+
emit it or a re-ingest writes it again, with the last props landing; a domain `writer=` gets the same from
|
|
227
|
+
`kg_write(ws, nodes, edges, ensure_edges=True)`. A re-ingest does not remove records a document no longer yields.
|
|
228
|
+
A boundary decider is not cached either (engine gap G6).
|
|
228
229
|
|
|
229
230
|
## Building your own
|
|
230
231
|
|
|
@@ -134,4 +134,5 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
134
134
|
| PS-60 | TexWright (2026-11-05, `2026-11-05-export-the-default-segmenter-on-pack-sdk.md`): a table over the chunk cap was hard-split at a fixed length, mid-row; the rows after the cut lost their table layout (one span between them, no `TableRow`), and one item `chunk_layouts` could not place blocked every later item's layout. 4 of 140 records lost silently | the cut falls between lines and repeats the table's header in each continuation chunk; an unplaceable item no longer blocks later ones; a manifest cached with the old cut is re-chunked once; live: a 140-record x 76-column workbook yields 140 records | done 2026-11-05 (ADR-0141): live, the workbook (280 rows, two per record) gave 280/280 row records, 75/280 with the old cut |
|
|
135
135
|
| PS-61 | TexWright's question in the same request: the default segmenter `segment_layout` is on neither public tier, so a pack cannot wrap it | export it on `rag_wright.pack_sdk` | done 2026-11-05: `pack_sdk.segment_layout` (the engine's own object); the wrap-the-default pattern in `kg-construction.md` and the ingestion skill; a pack segmenter delegating to it runs through `build_ingestion` |
|
|
136
136
|
| PS-62 | TexWright, same request: the loss was silent (every `check_*` passed) | a record table whose rows do not each reach a unit with its `TableRow` is reported in the `IngestionReport` | done 2026-11-05: `DocumentReport.unreached_table_rows` (`table_ref`, `sheet`, `reached`, `total`, `missing`) and an `[ingest] warning:` line; a block table is not a loss; live, the pre-PS-60 cut on the workbook reports 75 of 280 rows reached (205 missing, matching the records lost), the new cut reports nothing |
|
|
137
|
+
| PS-63 | TexWright, `2026-10-15-g8-duplicates-edges-within-one-ingest.md` (gap G8): the default writer created every edge, so an edge several units emit (an entity several rows mention) landed once per unit, within one ingest and on every re-ingest | the default writer leaves one edge per (type, from node, to node); `api.kg_write` exposes the same; `kg_write` without the flag unchanged | done 2026-11-07: `kg_write(..., ensure_edges=)` (ADR-0142), the default writer passes it, `api.kg_write` exposes it; G8 closed, the ingestion skill and the KG-construction guide updated; live, TexWright's shape (140 children on two rows each, 20 parents) leaves 140 edges on an ingest and a re-ingest (280 then 560 before) |
|
|
137
138
|
| PS-48 | Port the agent harness's substrate behaviour tests from RuleWright onto the engine's fabric fixture (ADR-0139 handover): of RuleWright's 553 harness-touching tests, 314 test the substrate (port), 213 RuleWright's composition (stay), 25 live (1 substrate: OpenRouter cost accounting). Seven gated sub-tasks: **a** shared `tests/harness/fabric.py` + scripting/slow/hanging/failing fake models + `InMemorySaver` helpers, then events, skills, clarify (~23); **b** models and errors (~42); **c** runs, confirm, continuation (~32); **d** decisions and rules (~51); **e** grading (~32); **f** seen and memory (~41); **g** workers, batch, dispatch, tiers, agent wiring, filesystem, interpreter, withhold + the live accounting test (~93, may split). Ambiguous tests split, not moved whole; a ported test failing on engine code is a substrate defect fixed in that sub-task; deadline globals via monkeypatch; no new dependencies. Follow-up (owner RuleWright): retire its substrate duplicates once ported | each sub-task's ported tests green on the fabric fixture | todo (proposed; awaiting go-ahead) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rag-wright"
|
|
3
|
-
version = "0.17.
|
|
3
|
+
version = "0.17.1"
|
|
4
4
|
description = "A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.13"
|
|
@@ -199,7 +199,11 @@ category.
|
|
|
199
199
|
- **One record over several rows, or one entity over many units.** The extractor sees one unit at a time. A record
|
|
200
200
|
whose continuation rows sit under its main row needs a `unit_grouper=` that keeps them together, or a
|
|
201
201
|
`document_hook=` that reads the whole table with `table_rows` and writes the grouped record. An entity several units
|
|
202
|
-
mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key
|
|
202
|
+
mention (a case its trial rows share) is emitted by its key from each unit and upserted by that key; an edge to it
|
|
203
|
+
emitted from each unit lands once, because the default writer keeps one edge per (type, from node, to node)
|
|
204
|
+
(PS-63). A `writer=` of your own gets the same with `kg_write(ws, nodes, edges, ensure_edges=True)`; leave the flag
|
|
205
|
+
off only when parallel edges of one type between the same two nodes are meant to stay (each with its own
|
|
206
|
+
provenance).
|
|
203
207
|
- **Resume a long ingest instead of restarting it.** Pass a LangGraph checkpointer (yours, for example a Postgres
|
|
204
208
|
saver; the engine ships none) and a `run_id` naming the run:
|
|
205
209
|
`await pipeline.aingest(ws, sources, cache_dir=CACHE, checkpointer=saver, run_id=batch_id)`. If the process stops,
|
|
@@ -208,8 +212,9 @@ category.
|
|
|
208
212
|
sources, raise `ValueError`: a new run gets a new id. The graph state is built-in values only, so it works under
|
|
209
213
|
LangGraph's strict msgpack mode; a tuple inside a record's free-form `props` comes back as a list after a resume.
|
|
210
214
|
- **Re-ingest.** Parsing is cached by content hash, so re-running is cheap. The default writer upserts nodes by their
|
|
211
|
-
key
|
|
212
|
-
|
|
215
|
+
key and writes each edge once, updating its props, so a re-run leaves no duplicates. It does not remove what a
|
|
216
|
+
source no longer yields: when a re-run should drop records, remove its previous records first (`kg_delete` on the
|
|
217
|
+
provenance your records carry, such as a per-source property) and write again.
|
|
213
218
|
|
|
214
219
|
## 6. Verify (definition of done)
|
|
215
220
|
|
|
@@ -62,11 +62,12 @@ def kg_update(ws: WorkspaceHandle, type_name: str, *, set: dict, where: Optional
|
|
|
62
62
|
return ws._store.kg_update(type_name, set=set, where=where, key_range=key_range)
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = ()) -> None:
|
|
65
|
+
def kg_write(ws: WorkspaceHandle, nodes: list, edges: Any = (), *, ensure_edges: bool = False) -> None:
|
|
66
66
|
"""Upsert typed `nodes` + create typed `edges` in one transaction (see `Store.kg_write`). `nodes`/`edges` are
|
|
67
67
|
`KgNode`/`KgEdge` (from `rag_wright.api`); the store encodes each field per its pack-declared type. A node type
|
|
68
|
-
the workspace's schema does not declare fails the write.
|
|
69
|
-
|
|
68
|
+
the workspace's schema does not declare fails the write. `ensure_edges=True` (PS-63) writes at most one edge per
|
|
69
|
+
(type, from node, to node), the last props winning: what a domain `writer=` passes to match the default writer."""
|
|
70
|
+
ws._store.kg_write(nodes, edges, ensure_edges=ensure_edges)
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
def kg_edges(ws: WorkspaceHandle, from_type: Optional[str] = None, *, where: Optional[dict] = None,
|
|
@@ -259,9 +259,9 @@ class IngestionStages:
|
|
|
259
259
|
return stage
|
|
260
260
|
|
|
261
261
|
async def write(self, sd: Any, extractions: list) -> int:
|
|
262
|
-
"""Persist the records (the domain's writer, else `kg_write`). Returns the number that
|
|
263
|
-
count when it returns one; else the record nodes handed over, which the default
|
|
264
|
-
transaction (it raises rather than land part of them)."""
|
|
262
|
+
"""Persist the records (the domain's writer, else `kg_write` with idempotent edges). Returns the number that
|
|
263
|
+
landed: the writer's own count when it returns one; else the record nodes handed over, which the default
|
|
264
|
+
`kg_write` lands in one transaction (it raises rather than land part of them)."""
|
|
265
265
|
if self.writer is not None:
|
|
266
266
|
landed = await self.writer(sd.source_doc_id, extractions)
|
|
267
267
|
if landed is not None:
|
|
@@ -269,7 +269,8 @@ class IngestionStages:
|
|
|
269
269
|
else:
|
|
270
270
|
nodes = [n for e in extractions for n in e.nodes]
|
|
271
271
|
edges = [ed for e in extractions for ed in e.edges]
|
|
272
|
-
|
|
272
|
+
# PS-63 (G8): an edge several units emit (an entity several rows mention), or a re-ingest, lands once
|
|
273
|
+
await asyncio.to_thread(self.store.kg_write, nodes, edges, ensure_edges=True)
|
|
273
274
|
return sum(len(e.nodes) for e in extractions)
|
|
274
275
|
|
|
275
276
|
def write_document_node(self, doc_id: str, *, parent_id: Optional[str], filename: str, media_type: str,
|
|
@@ -841,9 +841,12 @@ class ArcadeDBStore:
|
|
|
841
841
|
self._prop_types_cache = cache
|
|
842
842
|
return cache.get(type_name, {})
|
|
843
843
|
|
|
844
|
-
def kg_write(self, nodes, edges=()) -> None:
|
|
844
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges: bool = False) -> None:
|
|
845
845
|
"""Upsert typed `nodes` (by `key_field`) then create typed `edges`, all in one transaction (see
|
|
846
|
-
`Store.kg_write`). Node props encode by the type's pack-declared storage type; edge props are type-driven.
|
|
846
|
+
`Store.kg_write`). Node props encode by the type's pack-declared storage type; edge props are type-driven.
|
|
847
|
+
With `ensure_edges` (PS-63) an edge is one per (type, from node, to node): the batch keeps each one's last
|
|
848
|
+
props, an existing edge has them set (reached from its indexed from node, not by scanning the edge type),
|
|
849
|
+
and `CREATE EDGE ... IF NOT EXISTS` adds it only when absent."""
|
|
847
850
|
nodes, edges = list(nodes), list(edges)
|
|
848
851
|
for n in nodes:
|
|
849
852
|
_kg_check_node(n)
|
|
@@ -855,13 +858,24 @@ class ArcadeDBStore:
|
|
|
855
858
|
sets = ", ".join(f"{k} = {_kg_encode(v, types.get(k))}" for k, v in n.props.items())
|
|
856
859
|
key_sql = _kg_encode(n.props[n.key_field], types.get(n.key_field))
|
|
857
860
|
statements.append(f"UPDATE {n.type} SET {sets} UPSERT WHERE {n.key_field} = {key_sql}")
|
|
861
|
+
if ensure_edges:
|
|
862
|
+
edges = list({(e.type, e.from_type, e.from_key_field, e.from_key, e.to_type, e.to_key_field, e.to_key): e
|
|
863
|
+
for e in edges}.values())
|
|
858
864
|
for e in edges:
|
|
865
|
+
props = ", ".join(f"{k} = {_kg_sql(v)}" for k, v in e.props.items())
|
|
866
|
+
if ensure_edges and props:
|
|
867
|
+
statements.append(
|
|
868
|
+
f"UPDATE (SELECT FROM (SELECT expand(outE('{e.type}')) FROM {e.from_type}"
|
|
869
|
+
f" WHERE {e.from_key_field} = {_kg_sql(e.from_key)})"
|
|
870
|
+
f" WHERE inV().{e.to_key_field} = {_kg_sql(e.to_key)}) SET {props}")
|
|
859
871
|
stmt = (
|
|
860
872
|
f"CREATE EDGE {e.type}"
|
|
861
873
|
f" FROM (SELECT FROM {e.from_type} WHERE {e.from_key_field} = {_kg_sql(e.from_key)})"
|
|
862
874
|
f" TO (SELECT FROM {e.to_type} WHERE {e.to_key_field} = {_kg_sql(e.to_key)})")
|
|
863
|
-
if
|
|
864
|
-
stmt += "
|
|
875
|
+
if ensure_edges:
|
|
876
|
+
stmt += " IF NOT EXISTS"
|
|
877
|
+
if props:
|
|
878
|
+
stmt += " SET " + props
|
|
865
879
|
statements.append(stmt)
|
|
866
880
|
if statements:
|
|
867
881
|
# every node is an UPSERT, so a duplicate key here is two writers racing to create one node
|
|
@@ -278,10 +278,13 @@ class Store(Protocol):
|
|
|
278
278
|
`v.<f>` (far vertex) for a traversal; or a bare edge field / `inV().<f>` / `outV().<f>` for an edge scan.
|
|
279
279
|
A membership value that is an EMPTY list means scope-to-nothing -> `[]` with no query. Returns the rows."""
|
|
280
280
|
|
|
281
|
-
def kg_write(self, nodes: list["KgNode"], edges: "Iterable[KgEdge]" = ()) -> None:
|
|
281
|
+
def kg_write(self, nodes: list["KgNode"], edges: "Iterable[KgEdge]" = (), *, ensure_edges: bool = False) -> None:
|
|
282
282
|
"""Upsert typed `nodes` (by each node's `key_field`) then create typed `edges` (FROM/TO by node key), ALL in
|
|
283
283
|
ONE transaction, nodes first so endpoints exist. The caller passes DOMAIN-NATIVE values; the store owns all
|
|
284
|
-
wire encoding, driven by each node type's pack-declared property storage type. Empty input is a no-op.
|
|
284
|
+
wire encoding, driven by each node type's pack-declared property storage type. Empty input is a no-op.
|
|
285
|
+
`ensure_edges` (PS-63): at most one edge per (type, from node, to node), within the call, across calls and
|
|
286
|
+
across concurrent writers; an edge written again has the last props set on it. Without it every
|
|
287
|
+
edge is created, so parallel edges that each carry their own provenance are kept."""
|
|
285
288
|
|
|
286
289
|
def kg_ensure_edges(self, edges: "Iterable[KgEdge]") -> int:
|
|
287
290
|
"""ING-4b: write typed edges IDEMPOTENTLY -- create an edge only when none of its type already joins the
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Phase 2 output. The persistent, cross-session task ledger and shared memory of progress. Derived
|
|
4
4
|
from `plan.md` (Phase 1) and `SPEC.md` v0.1, honoring ADR-0001 (stack) and ADR-0002 (corpus).
|
|
5
5
|
|
|
6
|
-
> **2026-11-
|
|
6
|
+
> **2026-11-07: PS-63 done, unreleased** (TexWright's request `2026-10-15-g8-duplicates-edges-within-one-ingest.md`, gap G8): the default record writer keeps one edge per (type, from node, to node), within an ingest and across re-ingests (`kg_write(..., ensure_edges=True)`, also on `api.kg_write`; ADR-0142). Next: PS-48.
|
|
7
|
+
>
|
|
8
|
+
> **2026-11-05: `rag-wright` 0.17.0 is RELEASED (PR #21: PS-60, PS-61, PS-62).** PS-60 done (TexWright's request: a table over the chunk cap is split between lines with its header repeated, so every row keeps its own span and `TableRow`; ADR-0141). PS-61 done (TexWright's question: the default segmenter `segment_layout` is exported on `pack_sdk`, so a pack can wrap it). PS-62 done (a record table's rows that reach no unit are reported: `DocumentReport.unreached_table_rows` and an `[ingest] warning:` line). Next: PS-48.
|
|
7
9
|
>
|
|
8
10
|
> **2026-11-01: `rag-wright` 0.16.1 is RELEASED (PR #20: PS-57, PS-58, PS-59).** PS-57 done (RuleWright's request: a retried contracts-pack write no longer loses a document's clauses; the ArcadeDB conflict budget is configurable, default 20 attempts / 2 s cap; a racing UPSERT's duplicate key is retried). PS-58 done (RuleWright's second request: a `RecordWriter` returns the count that landed). PS-59 done (the store's client keeps keep-alive connections, one session per thread; `requests` declared). Next: PS-48.
|
|
9
11
|
>
|
|
@@ -19,7 +19,7 @@ class _FakeStore:
|
|
|
19
19
|
self.calls.append(("read", node_type, kw))
|
|
20
20
|
return [{"span_id": "doc:0:h#0", "bbox": "[0.1,0.2,0.3,0.4]", "doc_start": 1}]
|
|
21
21
|
|
|
22
|
-
def kg_write(self, nodes, edges=()):
|
|
22
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges=False):
|
|
23
23
|
self.calls.append(("write", list(nodes), list(edges)))
|
|
24
24
|
|
|
25
25
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""PS-63 (gap G8): the ingestion default writer asks the store for idempotent edges, and `api.kg_write` passes the
|
|
2
|
+
choice through; a domain `writer=` is untouched."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
from rag_wright.api import KgEdge, KgNode, kg_write
|
|
8
|
+
from rag_wright.api.workspace import WorkspaceHandle
|
|
9
|
+
|
|
10
|
+
from tests.ingestion.test_write_count import _DOC, _EXTRACTIONS, _stages
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class _Store:
|
|
14
|
+
def __init__(self) -> None:
|
|
15
|
+
self.calls: list[dict] = []
|
|
16
|
+
|
|
17
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges=False):
|
|
18
|
+
self.calls.append({"nodes": list(nodes), "edges": list(edges), "ensure_edges": ensure_edges})
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_the_default_writer_ensures_its_edges(tmp_path):
|
|
22
|
+
store = _Store()
|
|
23
|
+
asyncio.run(_stages(store=store, tmp_path=tmp_path).write(_DOC, _EXTRACTIONS))
|
|
24
|
+
assert [c["ensure_edges"] for c in store.calls] == [True]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def test_api_kg_write_passes_the_choice_through():
|
|
28
|
+
store = _Store()
|
|
29
|
+
ws = WorkspaceHandle(store, None, "t") # type: ignore[arg-type]
|
|
30
|
+
edge = KgEdge("E", "T", "k", "1", "T", "k", "2", {})
|
|
31
|
+
kg_write(ws, [KgNode("T", "k", {"k": "1"})], [edge])
|
|
32
|
+
kg_write(ws, [], [edge], ensure_edges=True)
|
|
33
|
+
assert [c["ensure_edges"] for c in store.calls] == [False, True]
|
|
@@ -43,7 +43,7 @@ class _Store:
|
|
|
43
43
|
raise RuntimeError("span store unavailable")
|
|
44
44
|
self.spans[record.span_id] = record
|
|
45
45
|
|
|
46
|
-
def kg_write(self, nodes, edges=()):
|
|
46
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges=False):
|
|
47
47
|
self.nodes += list(nodes)
|
|
48
48
|
self.edges += list(edges)
|
|
49
49
|
|
|
@@ -32,7 +32,7 @@ def test_a_writer_that_returns_nothing_keeps_the_engine_count(tmp_path):
|
|
|
32
32
|
|
|
33
33
|
def test_the_default_writer_counts_the_nodes_its_one_transaction_landed(tmp_path):
|
|
34
34
|
class _Store:
|
|
35
|
-
def kg_write(self, nodes, edges=()):
|
|
35
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges=False):
|
|
36
36
|
self.nodes = list(nodes)
|
|
37
37
|
|
|
38
38
|
store = _Store()
|
|
@@ -133,7 +133,7 @@ class _InMemoryStore:
|
|
|
133
133
|
return []
|
|
134
134
|
return []
|
|
135
135
|
|
|
136
|
-
def kg_write(self, nodes, edges=()): # DD-1b seam conformance: accept the generic typed write (no-op stub)
|
|
136
|
+
def kg_write(self, nodes, edges=(), *, ensure_edges=False): # DD-1b seam conformance: accept the generic typed write (no-op stub)
|
|
137
137
|
return None
|
|
138
138
|
|
|
139
139
|
def kg_edges(self, from_type=None, *, where=None, key_range=None, direction="out", edge_type=None,
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""PS-63 (TexWright, 2026-10-15; gap G8): `kg_write(..., ensure_edges=True)` writes an edge only once per (type, from
|
|
2
|
+
node, to node), within one call, across calls and across concurrent writers, with the last properties landing, all
|
|
3
|
+
in the one transaction. The ingestion default writer uses it, so two units emitting the same edge (an entity several
|
|
4
|
+
rows mention) leave one edge, and a re-ingest leaves one too. Without the flag `kg_write` is unchanged: a caller
|
|
5
|
+
whose parallel edges carry their own provenance keeps them."""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
import concurrent.futures as cf
|
|
10
|
+
|
|
11
|
+
import pytest
|
|
12
|
+
|
|
13
|
+
from rag_wright.store.arcadedb import ArcadeDBStore
|
|
14
|
+
from rag_wright.store.seam import KgEdge, KgNode
|
|
15
|
+
|
|
16
|
+
_DB = "ragwright_test_ps63_ensure_edges"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class _Recorder:
|
|
20
|
+
def __init__(self) -> None:
|
|
21
|
+
self.txns: list[list[str]] = []
|
|
22
|
+
|
|
23
|
+
def execute_transaction(self, statements) -> None:
|
|
24
|
+
self.txns.append(list(statements))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _store():
|
|
28
|
+
s = object.__new__(ArcadeDBStore)
|
|
29
|
+
s._db = _Recorder() # type: ignore[attr-defined]
|
|
30
|
+
s._property_types = lambda type_name: {} # type: ignore[attr-defined]
|
|
31
|
+
return s
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _edge(to="c1", **props):
|
|
35
|
+
return KgEdge("HasChild", "Parent", "parent_key", "p1", "Child", "child_key", to, props)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_an_ensured_edge_is_created_only_if_absent_and_its_props_updated_first():
|
|
39
|
+
s = _store()
|
|
40
|
+
s.kg_write([], [_edge(w=1)], ensure_edges=True)
|
|
41
|
+
(txn,) = s._db.txns
|
|
42
|
+
assert txn == [
|
|
43
|
+
"UPDATE (SELECT FROM (SELECT expand(outE('HasChild')) FROM Parent WHERE parent_key = 'p1')"
|
|
44
|
+
" WHERE inV().child_key = 'c1') SET w = 1",
|
|
45
|
+
"CREATE EDGE HasChild FROM (SELECT FROM Parent WHERE parent_key = 'p1')"
|
|
46
|
+
" TO (SELECT FROM Child WHERE child_key = 'c1') IF NOT EXISTS SET w = 1"]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_the_same_edge_twice_in_one_call_is_written_once_with_the_last_props():
|
|
50
|
+
s = _store()
|
|
51
|
+
s.kg_write([], [_edge(w=1), _edge("c2"), _edge(w=2)], ensure_edges=True)
|
|
52
|
+
(txn,) = s._db.txns
|
|
53
|
+
creates = [x for x in txn if x.startswith("CREATE EDGE")]
|
|
54
|
+
assert len(creates) == 2 and creates[0].endswith("SET w = 2") and "'c2'" in creates[1]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_an_ensured_edge_without_props_needs_no_update():
|
|
58
|
+
s = _store()
|
|
59
|
+
s.kg_write([], [_edge()], ensure_edges=True)
|
|
60
|
+
assert s._db.txns == [["CREATE EDGE HasChild FROM (SELECT FROM Parent WHERE parent_key = 'p1')"
|
|
61
|
+
" TO (SELECT FROM Child WHERE child_key = 'c1') IF NOT EXISTS"]]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_without_the_flag_kg_write_still_creates_every_edge():
|
|
65
|
+
s = _store()
|
|
66
|
+
s.kg_write([], [_edge(w=1), _edge(w=2)])
|
|
67
|
+
(txn,) = s._db.txns
|
|
68
|
+
assert len(txn) == 2 and all(x.startswith("CREATE EDGE") and "IF NOT EXISTS" not in x for x in txn)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# --- live -----------------------------------------------------------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
@pytest.fixture
|
|
74
|
+
def live():
|
|
75
|
+
s = ArcadeDBStore.from_env(database=_DB, reset=True)
|
|
76
|
+
for stmt in ("CREATE VERTEX TYPE Parent", "CREATE PROPERTY Parent.parent_key STRING",
|
|
77
|
+
"CREATE INDEX ON Parent (parent_key) UNIQUE", "CREATE VERTEX TYPE Child",
|
|
78
|
+
"CREATE PROPERTY Child.child_key STRING", "CREATE INDEX ON Child (child_key) UNIQUE",
|
|
79
|
+
"CREATE EDGE TYPE HasChild"):
|
|
80
|
+
s._command(stmt)
|
|
81
|
+
yield s
|
|
82
|
+
s.close()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _nodes():
|
|
86
|
+
return [KgNode("Parent", "parent_key", {"parent_key": "p1"})] + [
|
|
87
|
+
KgNode("Child", "child_key", {"child_key": f"c{i}"}) for i in (1, 2, 3)]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _edges(s):
|
|
91
|
+
return sorted((r["c"], r.get("w")) for r in s._query(
|
|
92
|
+
"SELECT inV().child_key AS c, w FROM HasChild"))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@pytest.mark.store
|
|
96
|
+
def test_live_two_units_emitting_one_edge_leave_one_edge_and_a_rewrite_updates_it(live):
|
|
97
|
+
# G8's reproduction: each child on two rows, both rows emit parent -> child; then the document is re-ingested
|
|
98
|
+
live.kg_write(_nodes(), [_edge(f"c{i}", w=1) for i in (1, 2, 3) for _row in (0, 1)], ensure_edges=True)
|
|
99
|
+
assert _edges(live) == [("c1", 1), ("c2", 1), ("c3", 1)]
|
|
100
|
+
live.kg_write(_nodes(), [_edge(f"c{i}", w=2) for i in (1, 2, 3)], ensure_edges=True)
|
|
101
|
+
assert _edges(live) == [("c1", 2), ("c2", 2), ("c3", 2)]
|
|
102
|
+
live.kg_write([], [KgEdge("HasChild", "Child", "child_key", "c1", "Parent", "parent_key", "p1", {})],
|
|
103
|
+
ensure_edges=True) # the reverse direction is a different edge
|
|
104
|
+
assert live._query("SELECT count(*) AS n FROM HasChild")[0]["n"] == 4
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@pytest.mark.store
|
|
108
|
+
def test_live_concurrent_writers_of_one_edge_leave_one_edge(live):
|
|
109
|
+
live.kg_write(_nodes())
|
|
110
|
+
with cf.ThreadPoolExecutor(8) as pool:
|
|
111
|
+
list(pool.map(lambda i: live.kg_write([], [_edge(f"c{i % 3 + 1}", w=1)], ensure_edges=True), range(48)))
|
|
112
|
+
assert _edges(live) == [("c1", 1), ("c2", 1), ("c3", 1)]
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@pytest.mark.store
|
|
116
|
+
def test_live_without_the_flag_parallel_edges_are_kept(live):
|
|
117
|
+
live.kg_write(_nodes(), [_edge(w=1), _edge(w=2)])
|
|
118
|
+
assert _edges(live) == [("c1", 1), ("c1", 2)]
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
@pytest.mark.store
|
|
122
|
+
def test_live_the_default_ingestion_writer_leaves_one_edge_per_shared_entity(live, tmp_path):
|
|
123
|
+
from rag_wright.api import IngestSource, UnitExtraction, build_ingestion
|
|
124
|
+
from tests.ingestion.test_builder import _FakeEmbedder
|
|
125
|
+
from tests.ingestion.test_unreached_rows import _sheet
|
|
126
|
+
from rag_wright.api.workspace import WorkspaceHandle
|
|
127
|
+
from rag_wright.api import EngineConfig, StoreConfig
|
|
128
|
+
|
|
129
|
+
live.ensure_schema()
|
|
130
|
+
|
|
131
|
+
async def extract(unit, *, source_doc_id): # every row names the one parent, so every unit emits the one edge
|
|
132
|
+
return UnitExtraction(nodes=_nodes()[:2], edges=[_edge("c1", w=1, span_id=unit.anchor.span_id)])
|
|
133
|
+
|
|
134
|
+
ws = WorkspaceHandle(live, EngineConfig(store=StoreConfig.from_env()), _DB)
|
|
135
|
+
pipe = build_ingestion(extract, embedder=_FakeEmbedder(), progress=lambda _l: None)
|
|
136
|
+
for _run in (1, 2): # an ingest, then a re-ingest
|
|
137
|
+
report = asyncio.run(pipe.aingest(ws, [IngestSource(path=str(_sheet(tmp_path, 6, 3)), doc_id="db",
|
|
138
|
+
table_mode="record")], cache_dir=tmp_path / "cache"))
|
|
139
|
+
(doc,) = report.documents
|
|
140
|
+
assert doc.units == 6 and not doc.extraction_failures and doc.dead_letter is None
|
|
141
|
+
assert _edges(live) == [("c1", 1)]
|
|
142
|
+
assert live._query("SELECT span_id FROM HasChild")[0]["span_id"].endswith("#6") # the last unit's props landed
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rag_wright-0.17.0 → rag_wright-0.17.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md
RENAMED
|
File without changes
|