rag-wright 0.16.0__tar.gz → 0.16.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.16.0 → rag_wright-0.16.1}/.claude/skills/building-an-ingestion-capability/SKILL.md +1 -1
- rag_wright-0.16.1/.release-please-manifest.json +3 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/CHANGELOG.md +9 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/CLAUDE.md +3 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/PKG-INFO +2 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/api/README.md +3 -3
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/api/pack_sdk.md +1 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/configuration.md +9 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/kg-construction.md +3 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/plan.md +3 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/pyproject.toml +2 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +1 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/config.py +4 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/workspace.py +3 -1
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/ingestion.py +4 -2
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/builder.py +6 -2
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +13 -8
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/store/arcadedb.py +113 -24
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tasks.md +3 -1
- rag_wright-0.16.1/tests/ingestion/test_write_count.py +39 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_concurrent_writes.py +76 -0
- rag_wright-0.16.1/tests/store/test_pooled_client.py +104 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_store_create_flag.py +1 -0
- rag_wright-0.16.1/tests/subgraphs/test_contract_write_retry.py +97 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/uv.lock +3 -1
- rag_wright-0.16.0/.release-please-manifest.json +0 -3
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/settings.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.env.example +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/.gitignore +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/LICENSE +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/SPEC.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/conftest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/0140-one-model-family-on-metal.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/adr/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/api/harness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/architecture.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.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.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/concepts.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/evals.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/harness.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/installation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/playbook.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/quickstart.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/reference-pack.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/releasing.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/evals/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/langgraph-ingestion/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/docs/workspaces.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/build_golden.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/embedded_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/function_ceiling.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/function_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/golden.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/harness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/kg_primary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/multihop.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/nl_to_type.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/relational_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/test_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/test_harness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/examples/model_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/examples/quickstart.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/plan.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/release-please-config.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acord_unify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/build_harness_doc.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/graph_status.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/measure_harness_genericity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/measure_silver.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-a-product-frontend/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/.agents/skills/using-the-rag-wright-engine/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/agents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/embedding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/parse_audit.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/parsing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/reranking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/sheet_tables.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/span_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/evals.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/evals/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/evals/gold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/evals/langfuse_backend.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/evals/runner.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/evals/scorers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/accounting.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/agent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/batch.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/clarify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/confirm.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/decisions.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/definition.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/dispatch.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/errors.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/events.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/filesystem.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/grading.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/interpreter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/memory.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/rules.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/runs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/seen.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/skills.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/thinking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/tiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/withhold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/harness/workers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/pack_sdk/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/dim_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/store/seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/util/devices.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/util/pdfium.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_agent_chat_model.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_agent_chat_model_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_api_embedder_ps39.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_discover.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_documents.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_drop_workspace.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_drop_workspace_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_migrate_span_fields.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_options.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_pdf_page_count.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_public_gaps_ps38.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_tracing_helpers_ps32.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_lock_version.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_pdfium_door.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/arch/test_shipped_skills.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/async_helpers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_parse_audit.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_reranking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_span_search.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/conftest.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_gold_contracts.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_gold_import.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_langfuse_backend.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_runner.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_scorer_parity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_scorers_a.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_scorers_b.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_scorers_c.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/evals/test_scorers_d.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_greenfield_conformance.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_accounting.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_engine_wiring.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_genericity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_recorder.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/harness/test_harness_thinking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_aevaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_graph_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_graph_parity.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_sheet_continuations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_seam_event_loops.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/models/test_usage.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/scripts/test_generation_robustness_errors.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/skills/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/skills/test_creating_evals_skill_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_contains.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_identifiers.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_range.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_pack_schema_properties.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/util/__init__.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/util/test_devices.py +0 -0
- {rag_wright-0.16.0 → rag_wright-0.16.1}/tests/util/test_spacy_model.py +0 -0
{rag_wright-0.16.0 → rag_wright-0.16.1}/.claude/skills/building-an-ingestion-capability/SKILL.md
RENAMED
|
@@ -28,7 +28,7 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
|
|
|
28
28
|
| group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
|
|
29
29
|
| choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
|
|
30
30
|
| extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
|
|
31
|
-
| write records | engine default | `kg_write` | `writer=` |
|
|
31
|
+
| write records | engine default | `kg_write` | `writer=` (returns the number of records now in the graph, or `None`) |
|
|
32
32
|
| per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
|
|
33
33
|
| `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
|
|
34
34
|
|
|
@@ -4,6 +4,15 @@ 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.16.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.16.0...0.16.1) (2026-11-01)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* **PS-57:** a retried write no longer loses a document's clauses; the conflict budget is configurable ([5d209d7](https://github.com/fzaidi-dai/RAG_Wright/commit/5d209d7eb1ab4bad93cd7026e81e79d9b6852fe5))
|
|
13
|
+
* **PS-58:** a record writer reports the count that landed ([a7c384c](https://github.com/fzaidi-dai/RAG_Wright/commit/a7c384cfab59832f9714bac9996f91a29340ed71))
|
|
14
|
+
* **PS-59:** the store's client keeps keep-alive connections, one session per thread ([f644ba3](https://github.com/fzaidi-dai/RAG_Wright/commit/f644ba3f3f37f12102037405b9a58567098358b3))
|
|
15
|
+
|
|
7
16
|
## [0.16.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.15.0...0.16.0) (2026-10-28)
|
|
8
17
|
|
|
9
18
|
|
|
@@ -55,7 +55,9 @@ The failure mode to avoid, which has happened before: a command fails with "modu
|
|
|
55
55
|
|
|
56
56
|
## Start of every session
|
|
57
57
|
|
|
58
|
-
> **CURRENT STATE (2026-10-
|
|
58
|
+
> **CURRENT STATE (2026-10-29): `rag-wright` 0.16.0 is RELEASED** (PR #19; TexWright's requests: PS-54 a `Contains`
|
|
59
|
+
> substring `where` value, PS-55 only the BGE models on Metal under one process lock (ADR-0140); PS-56 the BGE reranker
|
|
60
|
+
> scores again on transformers 5). Before it, **`rag-wright` 0.15.0 is RELEASED** (PR #18; PS-51 the frontend skill draws the shell and
|
|
59
61
|
> ships its scaffold, RuleWright's request; PS-52 one workspace embedder under concurrent first use and PS-53 KG calls refuse
|
|
60
62
|
> a name that is not an identifier, TexWright's requests). Before it, **`rag-wright` 0.14.1 is RELEASED** (PR #17; TexWright's two requests: PS-49 a retried
|
|
61
63
|
> ArcadeDB write conflict no longer prints as an error, PS-50 `ensure_pack_schema` declares a property a pack gains on an
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.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
|
|
@@ -42,6 +42,7 @@ Requires-Dist: pydantic>=2.0
|
|
|
42
42
|
Requires-Dist: pypdfium2>=5.11
|
|
43
43
|
Requires-Dist: pyshacl>=0.40.1
|
|
44
44
|
Requires-Dist: python-dotenv>=1.2
|
|
45
|
+
Requires-Dist: requests>=2.34.2
|
|
45
46
|
Requires-Dist: scikit-learn>=1.9.1
|
|
46
47
|
Requires-Dist: sentence-transformers>=6.1.0
|
|
47
48
|
Requires-Dist: transformers<5.9,>=5.4
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
The product's view of the engine: the store connection, chosen models (`models`: `ModelRole` value -> model alias), the embedding profile, the `options` catalog (generic `ingest` knobs + each pack's options under `packs`), and `pack`: the path to the domain pack `.ttl` whose KG types `open_workspace` creates (None = only the neutral engine types: Chunk, Entity, Relationship, Mentions, Span, Document, EmbeddedIn, AttachedTo). Defaults just work; override only to trade quality/cost/latency. Implementation details (ArcadeDB, BGE) never cross this boundary.
|
|
10
10
|
|
|
11
|
-
### `StoreConfig(host: 'str', port: 'str', user: 'str', password: 'str', backend: 'str' = 'arcadedb', protocol: 'str' = 'http') -> None`
|
|
11
|
+
### `StoreConfig(host: 'str', port: 'str', user: 'str', password: 'str', backend: 'str' = 'arcadedb', protocol: 'str' = 'http', conflict_attempts: 'Optional[int]' = None, conflict_backoff_cap_s: 'Optional[float]' = None) -> None`
|
|
12
12
|
|
|
13
13
|
How to reach the KG/retrieval store. `backend` selects the implementation (only `arcadedb` today; a new backend -- e.g. Neo4j -- is added here, invisibly to the product).
|
|
14
14
|
|
|
@@ -304,9 +304,9 @@ PS-R3: which member span represents a unit -- a DOMAIN decision. The engine appl
|
|
|
304
304
|
|
|
305
305
|
One unit -> the domain's typed records (required; the domain-specific step).
|
|
306
306
|
|
|
307
|
-
### `RecordWriter: (source_doc_id: 'str', extractions: 'Sequence[UnitExtraction]') -> 'Awaitable[
|
|
307
|
+
### `RecordWriter: (source_doc_id: 'str', extractions: 'Sequence[UnitExtraction]') -> 'Awaitable[Optional[int]]'`
|
|
308
308
|
|
|
309
|
-
Optional: persist a document's extractions. The engine default writes them with `kg_write`.
|
|
309
|
+
Optional: persist a document's extractions. The engine default writes them with `kg_write`. Return the number of records now in the graph (written, or found already written); `None` lets the engine count the record nodes it handed over (RuleWright, 2026-10-31: only the writer knows what landed).
|
|
310
310
|
|
|
311
311
|
### `BoundaryDiscoverer: (**kwargs)`
|
|
312
312
|
|
|
@@ -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
|
|
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).
|
|
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
|
|
|
@@ -45,6 +45,14 @@ configuration change takes effect without a restart ([`workspaces.md`](workspace
|
|
|
45
45
|
| `password` | `str` | — | password |
|
|
46
46
|
| `backend` | `str` | `"arcadedb"` | store implementation (only `arcadedb` today) |
|
|
47
47
|
| `protocol` | `str` | `"http"` | `http` locally; `https` for a remote/Modal store |
|
|
48
|
+
| `conflict_attempts` | `int \| None` | `None` | attempts per write when ArcadeDB reports a write conflict (`None`: `ARCADEDB_CONFLICT_ATTEMPTS`, else 20) |
|
|
49
|
+
| `conflict_backoff_cap_s` | `float \| None` | `None` | the longest wait between those attempts, in seconds (`None`: `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else 2) |
|
|
50
|
+
|
|
51
|
+
Concurrent writers that touch the same page get a write conflict; the store retries the write (the failed
|
|
52
|
+
transaction is rolled back whole) with a doubling wait from 10 ms up to the cap. Two writers creating the same new
|
|
53
|
+
node by `kg_write` get a duplicate key instead, which is retried the same way. A write that is still conflicting
|
|
54
|
+
after the last attempt raises, about 25 s after the first one with the defaults. Raise the budget when more than
|
|
55
|
+
eight documents write into one graph at once.
|
|
48
56
|
|
|
49
57
|
`StoreConfig.from_env()` builds one from `ARCADEDB_HOST` (default `localhost`), `ARCADEDB_PORT` (required: no
|
|
50
58
|
default, so an unset variable cannot reach another instance on the machine),
|
|
@@ -284,6 +292,7 @@ Prefer config; use env for secrets and for non-API callers. The common ones the
|
|
|
284
292
|
| variable | purpose |
|
|
285
293
|
|---|---|
|
|
286
294
|
| `ARCADEDB_HOST` / `ARCADEDB_PORT` / `ARCADEDB_USER` / `ARCADEDB_PASSWORD` / `ARCADEDB_DATABASE` / `ARCADEDB_PROTOCOL` | store connection: `StoreConfig.from_env()` reads them (and the scripts do); `open_workspace` itself reads only the `StoreConfig` it is given |
|
|
295
|
+
| `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S` | the write-conflict retry budget when `StoreConfig.conflict_attempts` / `conflict_backoff_cap_s` are unset |
|
|
287
296
|
| `OPENROUTER_API_KEY` / `OPENROUTER_BASE_URL` / `OPENROUTER_PROVIDER` / `OPENROUTER_ALLOW_FALLBACKS` | OpenRouter access + provider routing (`OPENROUTER_SORT` / `OPENROUTER_PROVIDER_ORDER`: the contracts pack's docling-graph extraction only) |
|
|
288
297
|
| `RAG_SERVING` / `VLLM_BASE_URL` / `VLLM_API_KEY` / `STACK_URL` | serving backend (openrouter \| vllm) + self-hosted endpoint |
|
|
289
298
|
| `RAG_MODEL_<ROLE>` (e.g. `RAG_MODEL_GENERAL`, `RAG_MODEL_VISION_OCR`) / `RAG_MODEL_ALL` / `RAG_GRAPH_EXTRACT_MODEL` / `RAG_DECISION_MODEL` | model overrides (one role / all roles / graph extraction / decision-model profile) |
|
|
@@ -59,7 +59,9 @@ parse → chunk → segment (+ optional tag) → index (embed each span → the
|
|
|
59
59
|
A unit holding exactly one data row of a parsed table carries that row as `Unit.table_row` (exact cells).
|
|
60
60
|
- **extract**: your `extractor` turns each unit into **typed records** (`UnitExtraction`: `KgNode`s and `KgEdge`s
|
|
61
61
|
in your pack's schema). This is the domain-specific step.
|
|
62
|
-
- **write**: persist the records (your `writer`, else `kg_write`), then a generic `Document` node per document.
|
|
62
|
+
- **write**: persist the records (your `writer`, else `kg_write`), then a generic `Document` node per document. Your
|
|
63
|
+
`writer` returns the number of records now in the graph (the report's `records`), or `None` to let the engine count
|
|
64
|
+
the record nodes it handed over.
|
|
63
65
|
- **entity graph + resolve**: not run by default. Run your entity extraction and resolution in a `document_hook`
|
|
64
66
|
(see [entity resolution](entity-resolution.md)).
|
|
65
67
|
|
|
@@ -128,4 +128,7 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
128
128
|
| PS-54 | TexWright's request (`docs/engine-requests/2026-10-19-substring-match-in-the-kg-filter-grammar.md`, their repo): the KG filter grammar had no substring predicate ("composition contains UHMWPE" over free text). `Contains(text, case_sensitive=False)`, a `where` value beside `Range` on every KG call that takes `where`: a literal `indexOf` test (not `LIKE`, whose `%`, `_` and `?` are wildcards, measured live), case folded on both sides in the store, a field with no value never matches, empty text refused | 8 hermetic tests (red before) + a live test (case both ways, literal wildcards, quotes and backslashes, accents, missing values, with `Range`, `kg_count`, a `kg_edges` traversal filtered at all three points); full hermetic (2353) and live store (42) suites green | done 2026-10-29 |
|
|
129
129
|
| PS-55 | TexWright's request (`docs/engine-requests/2026-10-25-two-model-families-in-one-process-abort-on-metal.md`, their repo): Metal is not safe for concurrent use and the engine put three families on it automatically (BGE-M3, the BGE reranker, Docling's layout/table/RapidOCR models), then ran them on different threads (an ingest embeds while it parses; a server embeds a query while an upload parses), so a process aborted in Metal. RuleWright had measured and pinned it in their own seam (T-7.25/T-7.46), never adopted here. `rag_wright.util.devices` (ADR-0140): only the BGE family on Metal, every call there under one process lock (`METAL_LOCK`); Docling and the pack classifiers on CPU where Metal would be picked (`pack_sdk.torch_device`); explicit device variables win; CUDA/CPU hosts unchanged; `docs/workspaces.md` corrected | red, torch 2.14.1 (TexWright's env, this engine tree): embedder + Docling in two threads, 6/6 child runs died in seconds (5 SIGABRT with their assertion, 1 SIGSEGV; OCR and PDF); torch 2.12.1 never failed. Green, same interpreter: 9/9 runs survived 150s each (OCR, PDF, two embedders). Full hermetic (2361) and live embed/parse/store (60) suites green. 8 hermetic tests (4 behaviour tests red before); Docling output identical CPU vs Metal | done 2026-10-29 |
|
|
130
130
|
| PS-56 | Found during PS-55: `BGEReranker` failed on every call (`XLMRobertaTokenizer has no attribute prepare_for_model`): FlagEmbedding's `FlagAutoReranker.compute_score` calls a tokenizer method transformers 5 removed, so the reference pack's `intra_document_qa` rerank (and RuleWright's copy) and any product composing `BGEReranker` over `span_search` hits were broken. The reranker is now a `sentence_transformers.CrossEncoder` (already a dependency) over the same `bge-reranker-v2-m3`, raw logits, 512 tokens per pair; same `BGEReranker` API, device and lock (PS-55) | red: the live reranker test failed on the tokenizer error. Green: it passes, plus a one-pair and a >512-token case; CrossEncoder's logits equal the model card's plain-transformers recipe (max abs diff 0.0, truncated passage included); embedder + reranker on Metal under the shared lock, torch 2.14.1: 3/3 runs survived 150s, 590 reranks and 586 embeds, none failing (before: the rerank thread died on its first call); full hermetic (2361) green | done 2026-10-29 |
|
|
131
|
+
| PS-57 | RuleWright's request (`docs/engine-requests/2026-10-31-a-write-conflict-loses-a-documents-clauses-and-your-pack-carries-the-defect.md`, their repo): at 4 concurrent documents, 2 of 15 reported `ingested` with zero clauses. The contracts pack's `write` node popped the pending extractions (filled by `extract_clauses`) before the store write landed, so the node's retry wrote nothing and reported success; it now reads them and releases them after the write. The conflict budget is reachable: `StoreConfig.conflict_attempts` / `conflict_backoff_cap_s`, else `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S`; default raised 10 attempts / 0.5 s cap to 20 / 2 s. Found by the live probe: two writers creating the same new node get a duplicate key, never retried; `kg_write` and `write_graph` (UPSERT-only) now retry it | pack retry test through the real per-document graph (0/3 clauses landed before, 3/3 after); six store tests; live probe (clause-shaped transactions over shared value nodes, pooled sessions): old budget lost 38/2,400 at 4 and 8 writers, new lost 0/2,400 at the same wall-clock; live store suite 42 passed | done 2026-11-01 |
|
|
132
|
+
| PS-58 | RuleWright's request (`docs/engine-requests/2026-10-31-ingestionstages-write-returns-a-count-derived-from-its-own-input.md`, their repo): `IngestionStages.write` returned the record nodes it was handed, and `RecordWriter` (declared `-> None`) could not say what landed. A writer now returns the number of records in the graph (`Optional[int]`; `None` keeps the engine's count); the default `kg_write` branch keeps the handed-over count, true because that write is one transaction (lands whole or raises). The contracts pack's writer returns the clauses in the graph and its `write` node reports that as `clauses` | three hermetic tests + the PS-57 retry test's count (red before, green after); live `build_ingestion` on two fixtures: default and a writer landing every other record, `records` equals the graph in all four documents | done 2026-11-01 |
|
|
133
|
+
| PS-59 | Found during PS-57: the ArcadeDB client opens a new connection for every request (`requests.post`, no session); at 8 concurrent writers against Docker on macOS about two thirds of writes failed with `RemoteDisconnected`, and with a keep-alive session per thread the same run lost none. Give the store's client a pooled session | live probe at 8 writers: zero connection drops | done 2026-11-01: the store's client (`_PooledClient`) keeps one keep-alive `requests.Session` per thread and `ArcadeDBStore.close()` releases them; live, the same probe lost 374 of 800 transactions to `RemoteDisconnected` unpooled and 0 of 800 at 8 writers and 0 of 1,600 at 16 pooled |
|
|
131
134
|
| 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.16.
|
|
3
|
+
version = "0.16.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"
|
|
@@ -51,6 +51,7 @@ dependencies = [
|
|
|
51
51
|
"pypdfium2>=5.11",
|
|
52
52
|
"pyshacl>=0.40.1",
|
|
53
53
|
"python-dotenv>=1.2",
|
|
54
|
+
"requests>=2.34.2",
|
|
54
55
|
"scikit-learn>=1.9.1",
|
|
55
56
|
"sentence-transformers>=6.1.0",
|
|
56
57
|
"transformers>=5.4,<5.9",
|
|
@@ -28,7 +28,7 @@ Repository paths in this skill (`docs/`, `eval/`, `scripts/`, `tests/`, `src/`)
|
|
|
28
28
|
| group spans into units | engine default, domain may override | a heading starts a unit, a table stays whole (a record table is one unit per row), page furniture dropped, units capped | `unit_grouper=`, `boundary_decider=` |
|
|
29
29
|
| choose each unit's representative span (its `anchor` + leading tag) | **domain decision**, optional | the grouper's choice: the first member, often a heading | `unit_representative=` |
|
|
30
30
|
| extract records from a unit | **domain (required)** | (none) | the `extractor` argument |
|
|
31
|
-
| write records | engine default | `kg_write` | `writer=` |
|
|
31
|
+
| write records | engine default | `kg_write` | `writer=` (returns the number of records now in the graph, or `None`) |
|
|
32
32
|
| per-document follow-up (e.g. an entity graph) | domain, optional | none | `document_hook=` |
|
|
33
33
|
| `Document` node, embedded children (`EmbeddedIn` / `AttachedTo`), progress, dead-lettering | engine | always on | (none) |
|
|
34
34
|
|
|
@@ -23,6 +23,10 @@ class StoreConfig:
|
|
|
23
23
|
password: str
|
|
24
24
|
backend: str = "arcadedb"
|
|
25
25
|
protocol: str = "http"
|
|
26
|
+
# RuleWright (2026-10-31): the write-conflict retry budget. None: `ARCADEDB_CONFLICT_ATTEMPTS` /
|
|
27
|
+
# `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else 20 attempts with each wait capped at 2 s (about 25 s in all).
|
|
28
|
+
conflict_attempts: Optional[int] = None
|
|
29
|
+
conflict_backoff_cap_s: Optional[float] = None
|
|
26
30
|
|
|
27
31
|
@classmethod
|
|
28
32
|
def from_env(cls) -> "StoreConfig":
|
|
@@ -131,7 +131,9 @@ def _build_store(config: EngineConfig, corpus: str, *, reset: bool, create: bool
|
|
|
131
131
|
from rag_wright.store.arcadedb import ArcadeDBStore
|
|
132
132
|
|
|
133
133
|
return ArcadeDBStore.from_config(sc.host, sc.port, sc.user, sc.password, database=corpus,
|
|
134
|
-
protocol=sc.protocol, reset=reset, pack_ttl=config.pack, create=create
|
|
134
|
+
protocol=sc.protocol, reset=reset, pack_ttl=config.pack, create=create,
|
|
135
|
+
conflict_attempts=sc.conflict_attempts,
|
|
136
|
+
conflict_backoff_cap_s=sc.conflict_backoff_cap_s)
|
|
135
137
|
|
|
136
138
|
|
|
137
139
|
def drop_workspace(config: EngineConfig, *, corpus: str) -> bool:
|
|
@@ -196,9 +196,11 @@ class Extractor(Protocol):
|
|
|
196
196
|
|
|
197
197
|
|
|
198
198
|
class RecordWriter(Protocol):
|
|
199
|
-
"""Optional: persist a document's extractions. The engine default writes them with `kg_write`.
|
|
199
|
+
"""Optional: persist a document's extractions. The engine default writes them with `kg_write`. Return the number of
|
|
200
|
+
records now in the graph (written, or found already written); `None` lets the engine count the record nodes it
|
|
201
|
+
handed over (RuleWright, 2026-10-31: only the writer knows what landed)."""
|
|
200
202
|
|
|
201
|
-
def __call__(self, source_doc_id: str, extractions: Sequence[UnitExtraction]) -> Awaitable[
|
|
203
|
+
def __call__(self, source_doc_id: str, extractions: Sequence[UnitExtraction]) -> Awaitable[Optional[int]]: ...
|
|
202
204
|
|
|
203
205
|
|
|
204
206
|
# --- the engine-enforced checks --------------------------------------------------------------------------------
|
|
@@ -252,9 +252,13 @@ class IngestionStages:
|
|
|
252
252
|
return stage
|
|
253
253
|
|
|
254
254
|
async def write(self, sd: Any, extractions: list) -> int:
|
|
255
|
-
"""Persist the records (the domain's writer, else `kg_write`). Returns the number
|
|
255
|
+
"""Persist the records (the domain's writer, else `kg_write`). Returns the number that landed: the writer's own
|
|
256
|
+
count when it returns one; else the record nodes handed over, which the default `kg_write` lands in one
|
|
257
|
+
transaction (it raises rather than land part of them)."""
|
|
256
258
|
if self.writer is not None:
|
|
257
|
-
await self.writer(sd.source_doc_id, extractions)
|
|
259
|
+
landed = await self.writer(sd.source_doc_id, extractions)
|
|
260
|
+
if landed is not None:
|
|
261
|
+
return int(landed)
|
|
258
262
|
else:
|
|
259
263
|
nodes = [n for e in extractions for n in e.nodes]
|
|
260
264
|
edges = [ed for e in extractions for ed in e.edges]
|
|
@@ -966,13 +966,14 @@ def aproduction_document_ingest(
|
|
|
966
966
|
nodes, edges = clause_kg_graph(record)
|
|
967
967
|
return UnitExtraction(nodes=nodes, edges=edges)
|
|
968
968
|
|
|
969
|
-
async def clause_kg_writer(source_doc_id: str, extractions: list) ->
|
|
970
|
-
def _write() ->
|
|
969
|
+
async def clause_kg_writer(source_doc_id: str, extractions: list) -> int:
|
|
970
|
+
def _write() -> int:
|
|
971
971
|
for e in extractions: # the write_clause_kg content-hash gate (idempotent re-ingest)
|
|
972
972
|
if not ckg.already_written(e.nodes[0].props["clause_id"]):
|
|
973
|
-
store.kg_write(e.nodes, e.edges)
|
|
973
|
+
store.kg_write(e.nodes, e.edges) # one transaction per clause: it lands whole or raises
|
|
974
|
+
return len(extractions) # every clause is now in the graph, written here or before
|
|
974
975
|
|
|
975
|
-
await asyncio.to_thread(_write)
|
|
976
|
+
return await asyncio.to_thread(_write)
|
|
976
977
|
|
|
977
978
|
stages = IngestionStages(
|
|
978
979
|
store, extractor=clause_extractor_hook, segmenter=legal_segmenter, span_tagger=function_tagger,
|
|
@@ -1017,8 +1018,9 @@ def aproduction_document_ingest(
|
|
|
1017
1018
|
entity_rules=entity_rules)))
|
|
1018
1019
|
|
|
1019
1020
|
async def write_fn(doc: SourceDocument, clause_records: list, resolution: Any) -> dict:
|
|
1020
|
-
|
|
1021
|
-
|
|
1021
|
+
# read, not pop: `extract_clauses` fills this map, so a retry of this node must still find it (RuleWright,
|
|
1022
|
+
# 2026-10-31: a popped map made the retry write nothing and report success). Released once the write lands.
|
|
1023
|
+
landed = await stages.write(doc, extractions_by_doc.get(doc.source_doc_id, [])) # the clauses in the graph
|
|
1022
1024
|
|
|
1023
1025
|
def _write() -> dict:
|
|
1024
1026
|
nodes, edges = resolution
|
|
@@ -1030,9 +1032,12 @@ def aproduction_document_ingest(
|
|
|
1030
1032
|
stages.write_document_node(doc.source_doc_id, parent_id=None,
|
|
1031
1033
|
filename=doc.metadata.get("raw_title", "") or doc.source_doc_id,
|
|
1032
1034
|
media_type="", sha256=hashlib.sha256(doc.text.encode("utf-8")).hexdigest())
|
|
1033
|
-
return {"clauses":
|
|
1035
|
+
return {"clauses": landed, "entities": len(nodes), "edges": len(edges)}
|
|
1034
1036
|
|
|
1035
|
-
|
|
1037
|
+
written = await asyncio.to_thread(_write)
|
|
1038
|
+
extractions_by_doc.pop(doc.source_doc_id, None)
|
|
1039
|
+
chunks_by_doc.pop(doc.source_doc_id, None)
|
|
1040
|
+
return written
|
|
1036
1041
|
|
|
1037
1042
|
return abuild_document_ingest(
|
|
1038
1043
|
chunk_fn, segment_fn, clauses_fn, index_fn, graph_fn, resolve_fn, write_fn)
|
|
@@ -22,9 +22,12 @@ import logging
|
|
|
22
22
|
import os
|
|
23
23
|
import random
|
|
24
24
|
import re
|
|
25
|
+
import threading
|
|
25
26
|
import time
|
|
27
|
+
from dataclasses import dataclass, replace
|
|
26
28
|
from typing import Any, Iterable, Optional
|
|
27
29
|
|
|
30
|
+
import requests
|
|
28
31
|
from arcadedb_python import DatabaseDao, SyncClient
|
|
29
32
|
|
|
30
33
|
from rag_wright.contracts.chunk import BGE_M3_DENSE_DIM, ChunkRecord, MetadataValue
|
|
@@ -70,39 +73,59 @@ _SPAN_SPARSE_INDEX = f"{SPAN_TYPE}[sparse_indices,sparse_weights]"
|
|
|
70
73
|
# ArcadeDB answers concurrent writes to the same page with a `ConcurrentModificationException` and asks the client to
|
|
71
74
|
# retry; the failed command or transaction is rolled back whole, so a bounded retry with jittered backoff is safe
|
|
72
75
|
# (found by the ING-5 doc audit: unretried, concurrent ingestion silently lost spans and records).
|
|
73
|
-
|
|
76
|
+
# RuleWright (2026-10-31): the budget is the store's (`StoreConfig.conflict_attempts` / `conflict_backoff_cap_s`, else
|
|
77
|
+
# `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else these defaults). Measured live with clause-shaped
|
|
78
|
+
# transactions over shared value nodes: 10 attempts capped at 0.5 s (about 2 s of waiting) lost 38 of 2,400 at 4 and 8
|
|
79
|
+
# writers; 20 capped at 2 s lost none, at the same wall-clock (it waits only while a write conflicts).
|
|
80
|
+
_CONFLICT_RETRIES = 20
|
|
81
|
+
_CONFLICT_BACKOFF_CAP_S = 2.0
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass(frozen=True)
|
|
85
|
+
class _ConflictBudget:
|
|
86
|
+
attempts: int = _CONFLICT_RETRIES
|
|
87
|
+
cap_s: float = _CONFLICT_BACKOFF_CAP_S
|
|
88
|
+
# Two writers UPSERTing the same NEW key: the loser gets a duplicate key on the unique index, not a page conflict.
|
|
89
|
+
# Retried only where every node write is an UPSERT (the retry then finds the winner's record), never for a
|
|
90
|
+
# genuine duplicate.
|
|
91
|
+
duplicate_key: bool = False
|
|
92
|
+
|
|
93
|
+
|
|
74
94
|
# PS-49 (TexWright, 2026-10-17): the client logs every error response at ERROR before raising, so a conflict the retry
|
|
75
95
|
# absorbs printed exactly like a failure. While a retry is handling the call, that line is dropped; the retry says
|
|
76
96
|
# itself what happened (INFO when the write landed after retrying, ERROR when it gave up).
|
|
77
|
-
_RETRYING = contextvars.ContextVar("arcadedb_retrying", default=
|
|
97
|
+
_RETRYING: contextvars.ContextVar[Optional[_ConflictBudget]] = contextvars.ContextVar("arcadedb_retrying", default=None)
|
|
78
98
|
|
|
79
99
|
|
|
80
100
|
class _RetriedConflictFilter(logging.Filter):
|
|
81
101
|
def filter(self, record: logging.LogRecord) -> bool:
|
|
82
|
-
|
|
102
|
+
budget = _RETRYING.get()
|
|
103
|
+
return not (budget and _is_retryable_conflict(Exception(record.getMessage()),
|
|
104
|
+
duplicate_key=budget.duplicate_key))
|
|
83
105
|
|
|
84
106
|
|
|
85
107
|
logging.getLogger("arcadedb_python.api.sync").addFilter(_RetriedConflictFilter())
|
|
86
108
|
|
|
87
109
|
|
|
88
|
-
def _is_retryable_conflict(exc: BaseException) -> bool:
|
|
110
|
+
def _is_retryable_conflict(exc: BaseException, *, duplicate_key: bool = False) -> bool:
|
|
89
111
|
msg = str(exc)
|
|
90
|
-
return "ConcurrentModificationException" in msg or "Concurrent modification on page" in msg
|
|
112
|
+
return ("ConcurrentModificationException" in msg or "Concurrent modification on page" in msg
|
|
113
|
+
or (duplicate_key and ("DuplicatedKeyException" in msg or "Found duplicate key" in msg)))
|
|
91
114
|
|
|
92
115
|
|
|
93
|
-
def _retry_on_conflict(fn, *args, **kwargs):
|
|
94
|
-
token = _RETRYING.set(
|
|
116
|
+
def _retry_on_conflict(fn, *args, budget: _ConflictBudget = _ConflictBudget(), **kwargs):
|
|
117
|
+
token = _RETRYING.set(budget)
|
|
95
118
|
try:
|
|
96
|
-
for attempt in range(
|
|
119
|
+
for attempt in range(budget.attempts):
|
|
97
120
|
try:
|
|
98
121
|
result = fn(*args, **kwargs)
|
|
99
122
|
except Exception as exc: # noqa: BLE001 - only the retryable conflict is retried; anything else re-raises
|
|
100
|
-
if not _is_retryable_conflict(exc):
|
|
123
|
+
if not _is_retryable_conflict(exc, duplicate_key=budget.duplicate_key):
|
|
101
124
|
raise
|
|
102
|
-
if attempt ==
|
|
103
|
-
_log.error("ArcadeDB write conflict: gave up after %d attempts: %s",
|
|
125
|
+
if attempt == budget.attempts - 1:
|
|
126
|
+
_log.error("ArcadeDB write conflict: gave up after %d attempts: %s", budget.attempts, exc)
|
|
104
127
|
raise
|
|
105
|
-
time.sleep(min(
|
|
128
|
+
time.sleep(min(budget.cap_s, 0.01 * 2 ** attempt) + random.uniform(0, 0.01))
|
|
106
129
|
else:
|
|
107
130
|
if attempt:
|
|
108
131
|
_log.info("ArcadeDB write conflict retried %d times; the write landed", attempt)
|
|
@@ -312,13 +335,67 @@ def _sql_literal(value: MetadataValue) -> str:
|
|
|
312
335
|
return _sql_str(str(value))
|
|
313
336
|
|
|
314
337
|
|
|
338
|
+
class _PooledClient(SyncClient):
|
|
339
|
+
"""`SyncClient` over keep-alive connections, one `requests.Session` per thread (PS-59).
|
|
340
|
+
|
|
341
|
+
`SyncClient.post` / `get` call the bare `requests.post` / `requests.get`, so every request opens and closes a TCP
|
|
342
|
+
connection. Measured live during PS-57, 8 concurrent writers against Docker Desktop on macOS lost about two thirds
|
|
343
|
+
of their writes to `RemoteDisconnected`, and none with one keep-alive session per thread. Per thread because a
|
|
344
|
+
`Session` is not documented as thread-safe and the store is called from `asyncio.to_thread` workers. The two
|
|
345
|
+
methods are the library's own with the session in place of the module call (arcadedb_python 0.4.0); ArcadeDB
|
|
346
|
+
keeps a transaction in the `arcadedb-session-id` header and sets no cookies, so a session carries nothing else."""
|
|
347
|
+
|
|
348
|
+
def __init__(self, host: str, port: str, protocol: str = "http", **kwargs):
|
|
349
|
+
self._local = threading.local()
|
|
350
|
+
self._sessions: list[requests.Session] = []
|
|
351
|
+
self._sessions_lock = threading.Lock()
|
|
352
|
+
super().__init__(host, port, protocol, **kwargs) # its login check already posts through `_session`
|
|
353
|
+
|
|
354
|
+
def _session(self) -> requests.Session:
|
|
355
|
+
session = getattr(self._local, "session", None)
|
|
356
|
+
if session is None:
|
|
357
|
+
session = self._local.session = requests.Session()
|
|
358
|
+
with self._sessions_lock:
|
|
359
|
+
self._sessions.append(session)
|
|
360
|
+
return session
|
|
361
|
+
|
|
362
|
+
def post(self, endpoint: str, payload: dict, return_headers: bool = False, extra_headers: dict = {}):
|
|
363
|
+
response = self._session().post(self._get_endpoint(endpoint), data=json.dumps(payload),
|
|
364
|
+
headers={**self.headers, **extra_headers},
|
|
365
|
+
auth=(self.username, self.password))
|
|
366
|
+
query = payload.get("command") if isinstance(payload, dict) else None
|
|
367
|
+
return self.subhandler(response, return_headers=return_headers, query=query)
|
|
368
|
+
|
|
369
|
+
def get(self, endpoint: str, return_headers: bool = False, extra_headers: dict = {}):
|
|
370
|
+
response = self._session().get(self._get_endpoint(endpoint), auth=(self.username, self.password),
|
|
371
|
+
headers=extra_headers)
|
|
372
|
+
return self.subhandler(response, return_headers=return_headers)
|
|
373
|
+
|
|
374
|
+
def close(self) -> None:
|
|
375
|
+
"""Close every thread's session. A thread that calls again afterwards opens a new one."""
|
|
376
|
+
with self._sessions_lock:
|
|
377
|
+
sessions, self._sessions = self._sessions, []
|
|
378
|
+
self._local = threading.local()
|
|
379
|
+
for session in sessions:
|
|
380
|
+
session.close()
|
|
381
|
+
|
|
382
|
+
|
|
315
383
|
class ArcadeDBStore:
|
|
316
384
|
"""The default store: schema management over a single ArcadeDB database."""
|
|
317
385
|
|
|
318
|
-
|
|
386
|
+
_conflicts = _ConflictBudget() # the default write-conflict budget; `__init__` resolves the configured one
|
|
387
|
+
|
|
388
|
+
def __init__(self, client: SyncClient, database: str, *, pack_ttl: str | None = None,
|
|
389
|
+
conflict_attempts: int | None = None, conflict_backoff_cap_s: float | None = None) -> None:
|
|
319
390
|
self._client = client
|
|
320
391
|
self._database = database
|
|
321
392
|
self._db = DatabaseDao(client, database)
|
|
393
|
+
# RuleWright (2026-10-31): the write-conflict retry budget (argument, else environment, else the default)
|
|
394
|
+
attempts = conflict_attempts or int(os.getenv("ARCADEDB_CONFLICT_ATTEMPTS") or _CONFLICT_RETRIES)
|
|
395
|
+
cap_s = conflict_backoff_cap_s or float(os.getenv("ARCADEDB_CONFLICT_BACKOFF_CAP_S") or _CONFLICT_BACKOFF_CAP_S)
|
|
396
|
+
if attempts < 1 or cap_s <= 0:
|
|
397
|
+
raise ValueError(f"the conflict budget needs attempts >= 1 and a backoff cap > 0 (got {attempts}, {cap_s})")
|
|
398
|
+
self._conflicts = _ConflictBudget(attempts, cap_s)
|
|
322
399
|
# AC-journey / ING-8a: the DOMAIN pack `.ttl` whose KG vertex/edge types `ensure_schema` creates and whose
|
|
323
400
|
# property storage types `kg_write` encodes by. `None` = NO domain pack (the neutral engine schema); a domain
|
|
324
401
|
# points this at its OWN pack ("config + .ttl", no engine edit), or ensures it on use (`ensure_pack_schema`).
|
|
@@ -326,7 +403,8 @@ class ArcadeDBStore:
|
|
|
326
403
|
|
|
327
404
|
@classmethod
|
|
328
405
|
def from_env(cls, *, database: str | None = None, reset: bool = False,
|
|
329
|
-
pack_ttl: str | None = None, create: bool = True
|
|
406
|
+
pack_ttl: str | None = None, create: bool = True, conflict_attempts: int | None = None,
|
|
407
|
+
conflict_backoff_cap_s: float | None = None) -> "ArcadeDBStore":
|
|
330
408
|
"""Build a store from `ARCADEDB_*` env, creating the database if absent (logged); `create=False` raises
|
|
331
409
|
`LookupError` instead (PS-27), for a path where the database must already exist.
|
|
332
410
|
|
|
@@ -339,21 +417,25 @@ class ArcadeDBStore:
|
|
|
339
417
|
os.environ["ARCADEDB_USER"], os.environ["ARCADEDB_PASSWORD"],
|
|
340
418
|
database=database or os.environ["ARCADEDB_DATABASE"],
|
|
341
419
|
protocol=os.getenv("ARCADEDB_PROTOCOL", "http"), # `https` for the Modal-hosted KG (EC-2)
|
|
342
|
-
reset=reset, pack_ttl=pack_ttl, create=create
|
|
420
|
+
reset=reset, pack_ttl=pack_ttl, create=create, conflict_attempts=conflict_attempts,
|
|
421
|
+
conflict_backoff_cap_s=conflict_backoff_cap_s)
|
|
343
422
|
|
|
344
423
|
@classmethod
|
|
345
424
|
def from_config(cls, host: str, port: str, user: str, password: str, *, database: str,
|
|
346
425
|
protocol: str = "http", reset: bool = False,
|
|
347
|
-
pack_ttl: str | None = None, create: bool = True
|
|
426
|
+
pack_ttl: str | None = None, create: bool = True, conflict_attempts: int | None = None,
|
|
427
|
+
conflict_backoff_cap_s: float | None = None) -> "ArcadeDBStore":
|
|
348
428
|
"""Build a store from EXPLICIT connection params (EP-API-1: the de-env'd twin of `from_env`, so engine
|
|
349
429
|
config flows as data, not `os.environ`). Creates the database if absent, and logs that it did (a product
|
|
350
430
|
provisions a new corpus this way); `create=False` raises `LookupError` naming the databases that exist,
|
|
351
431
|
and creates nothing (PS-27: a wrong name otherwise yields an empty graph, silently). `reset=True` drops +
|
|
352
432
|
recreates it, so it cannot be combined with `create=False`. `pack_ttl` selects the domain pack schema
|
|
353
|
-
(None = the neutral engine schema, no domain pack).
|
|
433
|
+
(None = the neutral engine schema, no domain pack). `conflict_attempts` / `conflict_backoff_cap_s` set the
|
|
434
|
+
write-conflict retry budget (None: `ARCADEDB_CONFLICT_ATTEMPTS` / `ARCADEDB_CONFLICT_BACKOFF_CAP_S`, else 20
|
|
435
|
+
attempts with waits capped at 2 s)."""
|
|
354
436
|
if reset and not create:
|
|
355
437
|
raise ValueError("reset=True drops and recreates the database; it cannot be combined with create=False")
|
|
356
|
-
client =
|
|
438
|
+
client = _PooledClient(host, port, protocol=protocol, username=user, password=password)
|
|
357
439
|
if reset and DatabaseDao.exists(client, database):
|
|
358
440
|
DatabaseDao.delete(client, database)
|
|
359
441
|
if not DatabaseDao.exists(client, database):
|
|
@@ -362,7 +444,8 @@ class ArcadeDBStore:
|
|
|
362
444
|
raise LookupError(f"database {database!r} does not exist (create=False); existing: {existing}")
|
|
363
445
|
DatabaseDao.create(client, database)
|
|
364
446
|
_log.info("created database %r (it did not exist)", database)
|
|
365
|
-
return cls(client, database, pack_ttl=pack_ttl
|
|
447
|
+
return cls(client, database, pack_ttl=pack_ttl, conflict_attempts=conflict_attempts,
|
|
448
|
+
conflict_backoff_cap_s=conflict_backoff_cap_s)
|
|
366
449
|
|
|
367
450
|
@staticmethod
|
|
368
451
|
def drop_database(host: str, port: str, user: str, password: str, *, database: str,
|
|
@@ -566,8 +649,10 @@ class ArcadeDBStore:
|
|
|
566
649
|
return DatabaseDao.exists(self._client, self._database)
|
|
567
650
|
|
|
568
651
|
def close(self) -> None:
|
|
569
|
-
#
|
|
570
|
-
|
|
652
|
+
# PS-59: release the client's keep-alive connections (a client built elsewhere may hold none)
|
|
653
|
+
close = getattr(self._client, "close", None)
|
|
654
|
+
if close is not None:
|
|
655
|
+
close()
|
|
571
656
|
|
|
572
657
|
# --- write-side (T20) -----------------------------------------------------------------------
|
|
573
658
|
|
|
@@ -779,7 +864,9 @@ class ArcadeDBStore:
|
|
|
779
864
|
stmt += " SET " + ", ".join(f"{k} = {_kg_sql(v)}" for k, v in e.props.items())
|
|
780
865
|
statements.append(stmt)
|
|
781
866
|
if statements:
|
|
782
|
-
|
|
867
|
+
# every node is an UPSERT, so a duplicate key here is two writers racing to create one node
|
|
868
|
+
_retry_on_conflict(self._db.execute_transaction, statements,
|
|
869
|
+
budget=replace(self._conflicts, duplicate_key=True))
|
|
783
870
|
|
|
784
871
|
def kg_ensure_edges(self, edges) -> int:
|
|
785
872
|
"""ING-4b (see `Store.kg_ensure_edges`): create each typed edge only if no edge of its type already joins
|
|
@@ -1026,7 +1113,9 @@ class ArcadeDBStore:
|
|
|
1026
1113
|
f" confidence = {_sql_str(edge.confidence)}, {_edge_provenance_assignments(edge.chunk_id)}"
|
|
1027
1114
|
)
|
|
1028
1115
|
if statements:
|
|
1029
|
-
|
|
1116
|
+
# every node is an UPSERT, so a duplicate key here is two writers racing to create one node
|
|
1117
|
+
_retry_on_conflict(self._db.execute_transaction, statements,
|
|
1118
|
+
budget=replace(self._conflicts, duplicate_key=True))
|
|
1030
1119
|
|
|
1031
1120
|
def _mentions_edge_exists(self, chunk_id: str, node_key: str) -> bool:
|
|
1032
1121
|
"""True iff a `Mentions` edge already connects this chunk to this entity (issue 0029 idempotence).
|
|
@@ -1200,7 +1289,7 @@ class ArcadeDBStore:
|
|
|
1200
1289
|
# --- internals ------------------------------------------------------------------------------
|
|
1201
1290
|
|
|
1202
1291
|
def _command(self, sql: str) -> Any:
|
|
1203
|
-
return _retry_on_conflict(self._db.query, "sql", sql, is_command=True)
|
|
1292
|
+
return _retry_on_conflict(self._db.query, "sql", sql, is_command=True, budget=self._conflicts)
|
|
1204
1293
|
|
|
1205
1294
|
def _query(self, sql: str) -> list[dict]:
|
|
1206
1295
|
result = self._db.query("sql", sql)
|
|
@@ -3,6 +3,8 @@
|
|
|
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-01: PS-57 done, unreleased** (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, unreleased (RuleWright's second request: a `RecordWriter` returns the count that landed). PS-59 done, unreleased (the store's client keeps keep-alive connections, one session per thread; `requests` declared). Next: PS-48.
|
|
7
|
+
>
|
|
6
8
|
> **⇒ RESUME / NEXT UP (2026-10-17, NEWEST): the LangGraph ingestion workstream is RELEASED as `rag-wright` 0.14.0** (PR #16)
|
|
7
9
|
> (`docs/specs/langgraph-ingestion/plan.md`, LGI-1..5; ADR-0124 amended; RuleWright guide
|
|
8
10
|
> `docs/specs/public-surface/rulewright-migration-0.14.0.md`). PS-49 done 2026-10-17 (a retried ArcadeDB write conflict no
|
|
@@ -10,7 +12,7 @@ from `plan.md` (Phase 1) and `SPEC.md` v0.1, honoring ADR-0001 (stack) and ADR-0
|
|
|
10
12
|
> existing type; TexWright's request); both RELEASED as `rag-wright` 0.14.1 (2026-10-28, PR #17). PS-51 done 2026-10-28 (the frontend skill draws the shell and ships
|
|
11
13
|
> its scaffold; RuleWright's request). PS-52 done 2026-10-28 (a workspace builds one embedder under
|
|
12
14
|
> concurrent first use; TexWright's 2026-10-24 request). **The open list, in order:** (1) TexWright's
|
|
13
|
-
> engine requests: 2026-10-21 unescaped KG identifiers (PS-53 done 2026-10-28; PS-51..53 RELEASED as `rag-wright` 0.15.0, 2026-10-28, PR #18), 2026-10-19 substring filter (PS-54 `Contains` done 2026-10-29
|
|
15
|
+
> engine requests: 2026-10-21 unescaped KG identifiers (PS-53 done 2026-10-28; PS-51..53 RELEASED as `rag-wright` 0.15.0, 2026-10-28, PR #18), 2026-10-19 substring filter (PS-54 `Contains` done 2026-10-29), 2026-10-25 Metal abort (PS-55 done 2026-10-29: one model family on Metal, ADR-0140; PS-56 done 2026-10-29: the reranker works on transformers 5 again; PS-54..56 RELEASED as `rag-wright` 0.16.0, 2026-10-29, PR #19);
|
|
14
16
|
> (2) **PS-48**, port the harness substrate tests from RuleWright onto the fabric fixture (ledger row in
|
|
15
17
|
> `docs/specs/public-surface/plan.md`, sub-tasks a..g, awaiting go-ahead); (3) EV-7, PS-30, PS-33. Before it,
|
|
16
18
|
> **(2026-10-14): PS-32 done, the agent harness is `rag_wright.harness`** (third public
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""RuleWright's request (2026-10-31): `IngestionStages.write` reported the records it was OFFERED, and a domain writer
|
|
2
|
+
had no way to say what landed. A writer may now return the number that landed; `None` keeps the engine's count."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
from rag_wright.api import KgNode, UnitExtraction
|
|
8
|
+
from rag_wright.pack_sdk import IngestionStages
|
|
9
|
+
from rag_wright.packs.contracts.subgraphs.contract_ingestion_pipeline import SourceDocument
|
|
10
|
+
|
|
11
|
+
_DOC = SourceDocument(source_doc_id="D1", text="text of D1")
|
|
12
|
+
_EXTRACTIONS = [UnitExtraction(nodes=[KgNode("Rec", "k", {"k": f"r{i}"})]) for i in range(3)]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _stages(writer=None, store=None, tmp_path="."):
|
|
16
|
+
return IngestionStages(store, extractor=None, writer=writer, cache_dir=tmp_path)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_the_writer_reports_what_landed(tmp_path):
|
|
20
|
+
async def writer(doc_id, extractions):
|
|
21
|
+
return 1 # it landed one of the three
|
|
22
|
+
|
|
23
|
+
assert asyncio.run(_stages(writer, tmp_path=tmp_path).write(_DOC, _EXTRACTIONS)) == 1
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_a_writer_that_returns_nothing_keeps_the_engine_count(tmp_path):
|
|
27
|
+
async def writer(doc_id, extractions):
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
assert asyncio.run(_stages(writer, tmp_path=tmp_path).write(_DOC, _EXTRACTIONS)) == 3
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_the_default_writer_counts_the_nodes_its_one_transaction_landed(tmp_path):
|
|
34
|
+
class _Store:
|
|
35
|
+
def kg_write(self, nodes, edges=()):
|
|
36
|
+
self.nodes = list(nodes)
|
|
37
|
+
|
|
38
|
+
store = _Store()
|
|
39
|
+
assert asyncio.run(_stages(store=store, tmp_path=tmp_path).write(_DOC, _EXTRACTIONS)) == 3 == len(store.nodes)
|