rag-wright 0.14.1__tar.gz → 0.16.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rag_wright-0.14.1/src/rag_wright/.agents → rag_wright-0.16.0/.claude}/skills/building-a-product-frontend/SKILL.md +70 -10
- rag_wright-0.16.0/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +82 -0
- rag_wright-0.16.0/.claude/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +90 -0
- rag_wright-0.16.0/.claude/skills/building-a-product-frontend/scaffold/surfaces.tsx +27 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
- {rag_wright-0.14.1/src/rag_wright/.agents → rag_wright-0.16.0/.claude}/skills/using-the-rag-wright-engine/SKILL.md +2 -2
- rag_wright-0.16.0/.release-please-manifest.json +3 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/CHANGELOG.md +26 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/CLAUDE.md +5 -1
- {rag_wright-0.14.1 → rag_wright-0.16.0}/PKG-INFO +1 -1
- rag_wright-0.16.0/docs/adr/0140-one-model-family-on-metal.md +57 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/README.md +2 -1
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/api/README.md +7 -3
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/api/pack_sdk.md +8 -4
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/configuration.md +2 -1
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/plan.md +7 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/workspaces.md +8 -1
- {rag_wright-0.14.1 → rag_wright-0.16.0}/pyproject.toml +1 -1
- {rag_wright-0.14.1/.claude → rag_wright-0.16.0/src/rag_wright/.agents}/skills/building-a-product-frontend/SKILL.md +70 -10
- rag_wright-0.16.0/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.test.tsx +82 -0
- rag_wright-0.16.0/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/ShellLayout.tsx +90 -0
- rag_wright-0.16.0/src/rag_wright/.agents/skills/building-a-product-frontend/scaffold/surfaces.tsx +27 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/specifying-a-product-on-the-engine/SKILL.md +1 -1
- {rag_wright-0.14.1/.claude → rag_wright-0.16.0/src/rag_wright/.agents}/skills/using-the-rag-wright-engine/SKILL.md +2 -2
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/__init__.py +2 -2
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/kg.py +20 -6
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/workspace.py +16 -5
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/embedding.py +17 -24
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/parsing.py +20 -3
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/reranking.py +24 -16
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/pack_sdk/__init__.py +2 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/clause_function_classifier.py +3 -1
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/dim_classifier.py +8 -15
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/store/arcadedb.py +90 -2
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/store/seam.py +20 -3
- rag_wright-0.16.0/src/rag_wright/util/devices.py +71 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tasks.md +6 -2
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_api_embedder_ps39.py +31 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_shipped_skills.py +11 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_reranking.py +6 -3
- rag_wright-0.16.0/tests/store/test_kg_contains.py +98 -0
- rag_wright-0.16.0/tests/store/test_kg_identifiers.py +80 -0
- rag_wright-0.16.0/tests/util/test_devices.py +143 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/uv.lock +1 -1
- rag_wright-0.14.1/.release-please-manifest.json +0 -3
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/settings.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/building-an-ingestion-capability/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/laya/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.env.example +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.github/workflows/publish.yml +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.github/workflows/release-please.yml +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/.gitignore +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/LICENSE +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/README.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/SPEC.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/conftest.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/ArcadeDB_Local.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/OBSERVABILITY.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0001-stack-and-library-choices.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0002-validation-corpus-cuad-edgar.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0003-ard-registration-and-capability-kinds.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0004-entity-disambiguation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0005-relational-golden-set.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0006-model-profile.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0007-arcadedb-store-schema.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0008-unified-framework-index-docs-grounding.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0009-rlm-chunking-retained-as-configurable-capability.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0010-transformers-pinned-below-5-for-flagembedding-reranker.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0011-cuad-not-a-retrieval-benchmark-acord-for-queries.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0012-entity-mention-confidence-no-proximity-edges.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0013-entity-resolution-matching-strategy.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0014-split-generation-and-vision-to-text.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0015-rlm-dynamic-subagents-and-granted-subagents.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0016-rlm-defined-by-required-capabilities-enforced-as-tests.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0017-dynamic-dispatch-trigger-as-typed-flag.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0018-rlm-method-is-the-orchestrator-system-prompt.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0019-recursion-is-optional-for-chunking-required-for-synthesis.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0020-serialize-interpreter-sessions-per-process-ki1.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0021-capability-interface-governed-typed-io.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0022-fr-k-embedding-free-okf-navigation-experimental.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0023-cheap-model-for-okf-enrichment.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0024-reader-parallelism-lives-in-python-not-the-interpreter.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0025-retrieval-pivot-function-classify-property-graph-rerank.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0026-property-schema-and-extended-function-taxonomy.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0027-openrouter-provider-routing-by-throughput.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0028-deterministic-grounding-judge-and-flash-pro-cascade.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0029-retrieval-pipeline-domain-portability-and-adaptation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0030-model-training-standard-modal-reusable-checkpointed.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0031-single-call-chunking-for-structured-contracts.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0032-nl-to-type-two-step-reason-emit-on-gemma.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0033-unified-contract-kg-three-legs-one-graph.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0034-granite-json-schema-structured-output-profile.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0035-graph-extraction-rebacked-with-gp1b-retire-hybrid.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0036-party-clause-link-party-to-edge.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0037-clause-template-is-authoritative-code-not-generated.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0038-full-cuad-kg-on-gcp-gpu-vm-and-gcs-backup.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0039-self-hosted-open-model-stack-on-modal-a100.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0040-neuro-symbolic-extraction-fidelity-ontology-shacl-validation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0041-capability-kind-rubric-and-agent-skill-runtime-tiers.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0042-clause-level-span-id-provenance-and-content-hash-backfill.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0043-retire-cross-corpus-retrieval-standardize-on-leg-b.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0044-is-exception-to-derived-carveout-relationship.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0045-client-side-tag-parse-structured-output.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0046-acord-unified-into-one-production-kg.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0047-retire-precomputed-clause-function-gate.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0048-ingest-llm-classifier-nondestructive-reclassify.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0049-generic-customer-lens-for-ingestion.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0050-async-langgraph-ingestion.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0051-schema-bootstrap-and-feedback-driven-ontology-evolution.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0052-engine-product-split-graphwright-parked.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0053-answer-prose-output-hygiene.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0054-remove-auto-tag-from-generator-evidence.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0055-confidence-out-of-band.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0056-bound-structured-retry-wall-clock.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0057-async-engine-architecture.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0058-structure-first-chunking.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0059-recall-decoupled-from-classification-and-visible-partial-loss.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0060-scope-compliance-check-to-named-policy-sources.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0061-subject-document-compliance-per-section.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0062-tiered-ocr-scan-quality-vlm-escalation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0063-per-sentence-compliance-subject-facts.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0064-typed-properties-out-of-band-on-evidence.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0065-deontic-applicability-gates-query-side.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0066-ontology-ttl-single-source-of-truth.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0067-domain-pack-retargeting.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0068-recall-first-actor-gate-ontology-role-disjointness.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0069-reading-order-chunking-tables-figures-retrievable.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0070-text-layer-first-parsing-no-false-vlm-escalation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0071-defragmentation-reconstruct-paragraphs-from-line-items.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0072-extract-guard-furniture-and-deterministic-failure.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0073-born-digital-threshold-sparse-pages-no-vlm-escalation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0074-retry-transient-extraction-failures.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0075-per-page-vlm-escalation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0076-thread-safe-shared-embedder-reranker.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0077-concurrent-function-classification-across-chunks.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0078-dedicated-extraction-executor.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0079-product-default-granite-4.2-openrouter-routing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0080-nested-tag-parse-and-degrade.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0081-function-independent-tagparse-clause-extraction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0082-symbolic-gate-function-independent.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0083-executor-hop-trace-context-capture.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0084-gleaning-off-on-the-query-leg.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0085-query-constraint-extraction-tagparse.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0086-streaming-cost-capture.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0087-retrieval-relevance-score-on-rankedspan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0088-per-span-relevance-verdict.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0089-structured-output-generation-tracing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0090-affiliate-of-extraction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0091-retire-partyto-edge.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0092-idempotent-write-graph.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0093-entities-by-name-seam.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0094-workspace-document-scope.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0095-span-page-provenance.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0096-carveout-keyword-normalization.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0097-caller-configurable-ingest-extraction-models.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0098-invoke-time-document-scope.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0099-mcp-tools-never-take-a-model-supplied-tenant.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0100-profile-based-model-routing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0101-untagged-spans-reach-extraction-aspect-gate-removed.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0102-open-descriptive-list-dims-retain-verbatim.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0103-a-clause-is-a-provision-not-a-span.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0104-dense-floor-protection-in-leg-b.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0105-in-band-model-usage-accounting.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0106-document-signals-off-the-citation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0107-requirement-page-provenance.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0108-qwen3-27b-single-a100-serving-profile.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0109-vllm-cold-start-reduction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0110-fp8-kv-cache-16k-single-a100.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0111-pin-qwen3-27b-deepinfra-bf16.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0112-relax-deepagents-pin-to-floor.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0113-llm-span-instrumentation-for-latency-attribution.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0114-setfit-default-clause-function-classifier.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0115-classifier-only-step3a-property-extraction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0116-soft-function-scoping-classifier-lane.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0117-engine-api-layer-and-capability-runtime.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0118-engine-core-api-vs-ard-adapter-free-impl-ref-client.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0119-jev-typed-decision-model-for-compliance-closed-set-fields.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0120-rlm-sub-agent-identity-dynamic-dispatch-trigger.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0121-spacy-optional-extra-model-runtime-download.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0122-provision-boundary-deterministic-plus-decision-model-residue.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0123-batched-releases-release-please-and-consumer-dependabot.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0124-generic-ingestion-builder-and-hooks.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0125-qwen-openrouter-unpinned.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0126-unit-representative-hook-and-the-reference-vote.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0127-retire-the-okf-code.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0128-two-public-tiers-api-and-pack-sdk.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0129-laya-temperatures-and-the-sklearn-floor.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0130-deploy-the-self-hosted-model-server-from-the-engine.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0131-model-server-hardening-after-rulewright-review.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0132-model-server-cold-start-from-a-gpu-snapshot.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0133-model-call-deadline-follows-the-timeout-and-a-thinking-cap.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0134-skills-for-product-developers-are-linked-per-project-never-globally.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0135-the-seam-gives-each-event-loop-its-own-async-http-client.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0136-spreadsheet-tables-are-glued-back-across-blank-rows.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0137-generated-answers-state-their-support-and-none-is-an-abstention.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0138-the-engine-reaches-pdfium-through-one-locked-door.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/adr/0139-the-agent-harness-substrate-is-engine-scope.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/api/harness.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/architecture/foundations-and-adding-a-domain.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/architecture.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/README.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/design/deontic-applicability-routing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/design/ingestion-neuro-symbolic-gaps.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/design/semantic-subject-segmentation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/design/unify-subject-preprocessing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0037-closed-vocab-drops-verbatim-values-to-other.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0038-a-clause-node-is-now-created-per-sentence-so-98-percent-of-spans-become-clauses.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0039-the-provision-detector-reads-text-but-docling-puts-the-section-number-in-marker.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0040-covered-subject-is-asked-of-every-provision-so-verbatim-retention-fills-it-with-noise.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0041-VERIFICATION-dense-floor.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0041-leg-b-discards-the-best-dense-matches-on-some-queries.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0042-usage-is-captured-per-call-but-never-returned-so-cost-needs-a-langfuse-round-trip.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0043-a-requirement-carries-no-page-provenance-so-a-finding-cannot-point-into-its-policy.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0044-document-signals-scaffolding-is-shown-to-the-user-as-a-quote-from-their-document.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0045-a-fixed-money-cap-records-no-cap-quantum-so-the-amount-is-only-prose.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0046-appending-a-natural-follow-up-to-a-question-drops-the-clause-type.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0047-an-exact-deepagents-pin-transitively-pins-every-consumer.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/engine-issues/0048-the-pinned-endpoints-latency-tail-makes-agent-runs-undebuggable-from-either-side.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-07-20_graphwright_capability_interface_reply.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-07-20b_graphwright_interface_confirmation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-07-20c_graphwright_ingestion_interfaces.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-08-30_subject_compliance_final_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-01_issue-0013-recall-first-actor-gate_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-01_ontology-source-of-truth_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-03_issue-0014-table-retrievability_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-04_bulk-ingestion-wall_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-04_issue-0016-thread-safe-embedder_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-05_observability-langfuse_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-05_tagparse-ingestion-and-granite-4.2_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_affiliate-of-extraction_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_issue-0028-partyto-retired_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_issue-0029-idempotent-write-graph_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_issue-0030-entities-by-name_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_observability-and-retrieval-floor_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_relevance-verdict_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_rename-run-ad-compliance-check_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-09_structured-output-cost-tracing_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_ingest-models-caller-configurable_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-failclosed-and-nodrift_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0031-followup-validate-ingested-set_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0031-workspace-document-scope_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0032-span-page-provenance_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0033-carveout-normalization_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-10_issue-0034-invoke-time-document-scope_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-11_issue-0035-followup-derived-guard_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-11_issue-0035-mcp-no-model-tenant_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-11_profile-based-model-routing_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-11_qwen-default-modal-or_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-11_qwen-everywhere-config_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-12_clause-granularity_0036-0039_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-12_closed-vocab_0037-0040_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-12_dense-floor-protection_0041_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-13_in-band-usage_0042_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-14_document-signals-off-citation_0044_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-14_requirement-page-provenance_0043_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-16_qwen3-27b-single-a100-serving-profile_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-18_fp8-accuracy-eval-configB_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-18_fp8-kv-16k-single-a100_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-20_deepagents-pin-relaxed_0047_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-20_llm-span-instrumentation_0048_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-answers_from_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/handoffs/2026-09-21_0048-part2-modal-scoping-questions_rulewright.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/misc/.gitkeep +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/Corpus_Acquisition.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/async-migration.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/demo_plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/gp1b_docling_graph_plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/unified_contract_kg_ontology_bridge.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/plans/unified_contract_kg_plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/results/2026-07-24-t58-property-graph-population.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/results/2026-07-25-t58b-full-pipeline-rerank.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/archive/results/2026-07-25-t58b-topk-ordering-levers.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/concepts.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/contract_pipeline_explainer.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/corpus_ingest_recipe.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/README.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/_engine-gaps.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/authoring-capabilities.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/classification-and-decision-models.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/entity-resolution.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/evals-from-expert-files.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/kg-construction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/domain-adaptation/ontology-authoring.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/classifier_model_ab.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/compliance_demo.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/compliance_gate_cc7.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/compliance_rung2_cc7.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/cuad_highlighting_cu-d1.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/dg_model_ab.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/function_gate_recall.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/generation_robustness_b_vs_c.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/nl_to_type_cu-d2.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/ocr_benchmark.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/prod1_readiness.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/prod2_readiness.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/query_side_model_ab.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/silver_granite_vs_gemma4.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/silver_provider_routing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/eval/silver_selfhosted_gemma4_26b.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/evals.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/harness.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/installation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/playbook.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/capability_profiles.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/contracts_product_roadmap.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/engine-api-migration-handoff.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/engine_async_api.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/new-domain-build-sequence.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/product/seam-adaptation-guide.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/proposals/compliance-ingest-classifier-decomposition.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/proposals/de-domaining-and-capability-runtime.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/proposals/new-domain-developer-journey.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/proposals/ontology-induction.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/quickstart.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/reference-pack.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/releasing.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/engine-platform/SPEC.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/engine-platform/TASKS.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/engine-prep/plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/evals/plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/ingestion-hooks/ing5-doc-audit.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/ingestion-hooks/ing8-breaking-changes.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/ingestion-hooks/plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/ingestion-hooks/rulewright-migration-0.2.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/langgraph-ingestion/plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-arcadedb-separation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.10.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.11.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.12.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.13.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.14.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.3.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.4.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.5.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.6.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.7.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.8.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-migration-0.9.0.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/specs/public-surface/rulewright-reply-2026-10-10-laya-and-sklearn.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/templates/product-starter/CLAUDE.md.template +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/templates/product-starter/README.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/templates/product-starter/dependabot.yml +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/templates/product-starter/playbook.md.template +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/upstream/laya-temperature-range-mismatch.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/vendor/arcadedb/arcadedb-buckets-schema.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/vendor/arcadedb/arcadedb-docs-extraction.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/vendor/arcadedb/arcadedb-vector-embeddings.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/docs/vendor/arcadedb/arcadedb-vector-search-tutorial.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/acord.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/acord_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/boundary_residue_gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/build_golden.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/compliance_demo/policy/community_conduct_policy.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/compliance_demo/subjects/post_borderline.txt +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/compliance_demo/subjects/post_compliant.txt +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/compliance_demo/subjects/post_violation.txt +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/condensed_pipeline.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/contract_parity_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/contractnli_judge.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/cuad_highlight.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/embedded_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/full_pipeline_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/function_ceiling.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/function_property_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/function_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/gate1_chunker_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/gate2_hybrid_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/golden/relational/set.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/golden.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/ground_discriminator_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/harness.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/ingestion_live_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/kg_primary.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/kg_property_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/listwise_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/multihop.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/nl_to_type.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/relational_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/residual_decision_gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/segmenter_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/semantic_judge_gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/test_acord.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/test_acord_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/test_harness.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/test_multihop_set.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/eval/unit_grouper_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/examples/model_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/examples/quickstart.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/plan.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/release-please-config.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ab_model_overlap.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acord_unify.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_acord.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_cuad.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_ecfr.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_edgar.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_ftc_255.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/acquire_prod1_corpus.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/audit_reclass_flips.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/author_leg_a_silver_key.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/backfill_affiliations.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/backfill_clause_span_id.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/backfill_edge_source_doc_id.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/backup_kg_to_gcs.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/bootstrap_template_capture.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/bootstrap_typed_edges.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/build_api_docs.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/build_api_docs.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/build_cuad_clause_cache.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/build_function_routing_map.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/build_harness_doc.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_assemble_v2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_assemble_v3.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_generate_hard_negatives.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_generate_hard_positives.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_generate_training.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_hybrid.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_hybrid2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_jev_actor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_jev_claimtypes.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_jev_operative.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_label_spans.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_laya_prep.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_laya_train.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_prep_operative.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_relabel_rubric.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_relabel_rubric2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/cic1_train_operative.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/compare_extraction_models.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/compliance_actor_gate_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/compliance_engine_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/compliance_policy_demo.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/curate_taxonomy_gaps.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/dg_model_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_knn_expansion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_knn_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_leg_pool.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_legs.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_pool.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_relstructure.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/diagnose_acord_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/eval_all.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/eval_ce.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/eval_listwise_b.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/export_ce_dataset.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/extract_features.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/listwise_variants.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/relational_features.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/train_ce.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/distill/train_modal.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/enrich_edgar_candidates.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/eval_chunking_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/eval_classifier_guided_vs_tagparse.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/eval_compliance_gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/extract_arcadedb_docs.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/fetch_reference_models.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/generate_contract_python.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/git_post_commit_graphify.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/granite_chunker_assess.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/graph_status.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_acord.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_compliance_async_prod2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_compliance_document_prod2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_compliance_prod2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_cuad.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_cuad_full.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_ftc_compliance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_prod1.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_prod1_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ingest_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/install_git_hooks.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/label_new_functions.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/legb_function_gate_recall.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/make_compliance_fixtures.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/make_compliance_gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/mcp_compliance_agent_demo.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/mcp_intra_document_qa_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/mcp_query_legs_agent_demo.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/measure_generation_robustness.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/measure_harness_genericity.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/measure_silver.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/merge_docs_into_framework.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/migrate_entity_cik_to_canonical_id.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/migrate_silver_evidence_autotag.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/migrate_silver_evidence_remove_autotag.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/migrate_span_fields.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/mine_scarce_functions.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_arcadedb.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_backfill.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_exception_linking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_gemma4_vllm.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_gemma4_vllm_snapshot.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_granite_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_granite_throughput.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_granite_vllm_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_query_app.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_qwen3_27b_bench.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_qwen3_27b_snapshot.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/modal_stack_a100.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ocr_benchmark.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ocr_preprocess.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/ontology_dimension_check.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/phase_a_leg_validate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/populate_clause_kg.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/populate_entity_graph.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/populate_entity_graph_extracted.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/populate_property_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/prep_relational_verification.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/publish_manifests.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/reclassify_kg.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/refresh_framework_graph.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/revert_reclass_flips.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/run_acord_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/run_clause_exception_linking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/semantic_judge_live_validate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/semantic_judge_probe.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/snapshot_leg_a_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/stack_correctness_validate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/table_retrieval_smoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/train_function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/train_legalbert_function.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/train_legalbert_modal.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/typed_rerank_validate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/verify_wheel_install.sh +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/vllm_extraction_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/vllm_kg_query_validate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/scripts/vllm_raw_diagnostic.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/authoring-a-capability/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/building-a-product-backend/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/building-an-agent-harness/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/building-an-ingestion-capability/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/classifier-opportunity-analysis/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/creating-evals/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/laya/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/modal_qwen3_vllm_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/qwen-vllm-modal/scripts/rw_gate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/.agents/skills/setfit/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/agents.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/answers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/config.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/discover.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/documents.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/ids.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/invoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/mcp.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/tracing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/api/usage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/answer_generator.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/ard.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/chunk_read.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/chunk_write.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/disambiguation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/document_parse.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/document_scope.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/embedding_profiles.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/entity_resolution.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/fusion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/graph_query.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/graph_storage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/hybrid_search.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/invoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/jev_decision.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/manifests.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/parse_audit.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/registry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/remote_encoders.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/retrieval_core.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/rlm_chunking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/rlm_synthesis.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/scan_quality.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/sheet_tables.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/span_relevance_judgment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/span_search.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/vision_to_text.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/capabilities/vlm_ocr.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/chunk.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/evals.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/graph.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/identifiers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/provenance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/contracts/span.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/corpus/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/corpus/canonicalize.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/corpus/document_parser.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/corpus/embedded.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/corpus/http.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/evals/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/evals/gold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/evals/langfuse_backend.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/evals/runner.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/evals/scorers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/accounting.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/agent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/batch.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/clarify.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/confirm.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/decisions.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/definition.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/dispatch.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/errors.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/events.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/filesystem.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/grading.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/interpreter.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/memory.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/models.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/rules.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/runs.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/scope.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/seen.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/skills.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/thinking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/tiers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/tracing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/withhold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/harness/workers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/builder.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/evaluate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/group.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/layout.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/segment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ingestion/tables.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/model_servers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/profiles.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/tag_structured.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/tracing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/usage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/models/weights.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ontology/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ontology/pack_schema.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/ontology/registry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/assertion_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/claim_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/compliance_judgment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/compliance_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/capabilities/requirement_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/invokers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/mcp/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/mcp/compliance_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/ontology/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/ontology/compliance_bridge.ttl +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/ontology/loader.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/ontology/packs/ftc_16cfr255.ttl +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/pack.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/schemas/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/schemas/compliance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/claim_extraction/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/claim_extraction/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/claim_extraction/template.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/generic_compliance_judgment/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/skills/requirement_extraction/template.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/subgraphs/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/subgraphs/compliance_check.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/subgraphs/compliance_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/compliance/subgraphs/requirement_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/clause_exception_linking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_serve.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/contract_kg_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/dg_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/graph_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/highlight_serve.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/property_boosted_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/query_function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/capabilities/query_understanding.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/cuad.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/cuad_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/edgar.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/gcs_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/corpus/selection.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/mcp/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/mcp/intra_document_qa_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/mcp/relational_qa_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/mcp/session_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/mcp/typed_property_retrieval_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/_generated_template_meta.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/_generated_vocab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/clause_template.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/codegen.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/contract_bridge.ttl +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/contract_taxonomy.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/derive.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/loader.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/ontology/template_introspect.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/options.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/pack.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/contract_meta.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/function.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/function_routing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/highlight.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/jurisdiction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/ontology.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/property.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/query_intent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/schemas/value_match.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/corpus_ingest/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/extraction_semantic_judge/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/guidance/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/guidance/chunking.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/guidance/generation.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/skills/guidance/relevance.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/boundary.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/clause_kg_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/cuad_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/dim_fleet.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/function_families.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/hybrid_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/legalbert_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/model_capabilities.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/new_function_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/property_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/property_grounding.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/reclassify.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/residual_candidates.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/scarce_function_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/segment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/semantic_judge.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/symbolic_validation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/spans/tag_clause_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/async_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/intra_document_qa.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/query_constraint_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/relational_qa.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/typed_clause_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/contracts/subgraphs/typed_property_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/packs/reference_seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/py.typed +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/generation/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/generation/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/rlm/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/rlm/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/rlm/agent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/span_relevance_judgment/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/vision_to_text/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/skills/vision_to_text/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/spans/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/spans/page_map.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/store/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/store/chunk_text.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/subgraphs/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/subgraphs/graph_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/subgraphs/observability.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/subgraphs/scaffold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/subgraphs/semantic_chunking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/util/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/util/concurrent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/util/pdfium.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/src/rag_wright/util/spacy_model.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_agent_chat_model.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_agent_chat_model_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_answers_exports.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_bytes_ingest.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_capability_reexports.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_decision_swap_doc_example.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_discover.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_documents.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_drop_workspace.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_drop_workspace_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_e2e.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_invoke.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_kg.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_mcp.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_metering_tracing_exports.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_migrate_span_fields.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_model_role_export.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_open_workspace_reconfig.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_options.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_pack_sdk.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_pack_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_pdf_page_count.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_public_gaps_ps38.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_tracing_helpers_ps32.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_usage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_workspace.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/api/test_workspace_models.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/domain_vocabulary_baseline.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_api_docs_current.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_doc_references.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_engine_domain_vocabulary.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_import_contracts.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_lock_version.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_packs_use_store_primitives.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/arch/test_pdfium_door.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/async_helpers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/_fixtures/rlm_probe_skill/SKILL.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_answer_generator.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_answer_generator_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_assertion_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_authoring_contract.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_chunk_read.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_chunk_write.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_chunking_prompts_neutral.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_claim_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_clause_exception_linking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_compliance_judgment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_compliance_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_contract_kg_serve.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_contract_kg_store.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_contract_kg_store_reads.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_contract_taxonomy_and_spans.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_dg_adapter.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_dg_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_dg_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_dg_model_seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_dg_private.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_disambiguation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_document_scope.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_embedding.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_embedding_profiles.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_entity_resolution.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_entity_rules_plumbing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_fusion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_graph_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_graph_query.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_graph_storage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_highlight_serve.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_hybrid_search.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_jev_decision.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_manifest_validation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_manifests.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_parse_audit.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_parsing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_parties_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_property_boosted_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_query_function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_query_understanding.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_registry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_remote_encoders.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_repair_partition.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_requirement_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_retrieval_core.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_rlm_chunking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_rlm_chunking_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_rlm_method.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_rlm_synthesis.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_runtime_registry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_scan_quality.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_span_relevance_judgment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_span_search.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_structural_boundary_discoverer.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_structural_model_fallback.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_tag_boundary_discoverer.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_tiered_ocr.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/capabilities/test_vlm_ocr.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/compliance_fakes.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/conftest.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_canonical_source_doc_id.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_chunk_record.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_compliance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_cuad_highlight_contracts.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_function.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_function_routing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_identifiers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_ingestion_hooks.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_jurisdiction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_ontology.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_property.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_provenance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/contracts/test_value_match.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/_ooxml_fixtures.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_canonicalize.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_cuad.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_cuad_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_document_parser.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_edgar.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_embedded.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_gcs_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_http.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_parse_wire2.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/corpus/test_selection.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/eval/test_contractnli_judge.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/eval/test_cuad_highlight_metrics.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/eval/test_kg_property_rerank.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/eval/test_nl_to_type_metrics.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/eval/test_relational_eval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_gold_contracts.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_gold_import.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_langfuse_backend.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_runner.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_scorer_parity.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_scorers_a.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_scorers_b.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_scorers_c.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/evals/test_scorers_d.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity_blank.pdf +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity_cover_with_attachment.pdf +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity_db_with_a_broken_report.xlsx +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity_db_with_reports.xlsx +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/parity_grid.xlsx +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/segmenter_gold.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/textile_spec_sheet.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/ingestion/textile_test_report.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/leg_a_silver/README.md +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/leg_a_silver/evidence_snapshot.json +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/fixtures/table-bearing-contract.pdf +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/foundation/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/foundation/test_arcadedb_hybrid.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/foundation/test_model_seam_structured.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_greenfield_conformance.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_accounting.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_engine_wiring.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_genericity.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_recorder.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/harness/test_harness_thinking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_aevaluate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_builder.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_chunk_discoverer_hook.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_concurrency_ceiling.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_document_metadata.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_evaluate.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_evaluate_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_graph_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_graph_parity.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_layout_segmenter.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_sheet_continuations.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_spreadsheet_content.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_table_rows.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_tuning.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_unit_grouper.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ingestion/test_unit_representative.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/journey/incidents_domain.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/journey/incidents_pack.ttl +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/journey/test_incidents_journey.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/journey/test_pack_schema.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/test_compliance_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/test_intra_document_qa_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/test_no_model_supplied_tenant.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/test_relational_qa_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/mcp/test_typed_property_retrieval_server.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_async_infra.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_classifier_heads_load_clean.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_model_servers.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_models_dir.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_no_gemma_default.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_profile_routing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_profile_seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_seam_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_seam_deadline_and_cap.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_seam_event_loops.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_seam_retry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_seam_stream.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_serving_seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_serving_wiring.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_tag_structured.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_tag_structured_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_tracing.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/models/test_usage.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_clause_template.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_compliance_ontology_authoritative.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_derivation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_entity_taxonomy.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_generated_template_meta_in_sync.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_generated_vocab_in_sync.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_template_captured_in_ttl.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/ontology/test_ttl_is_source_of_truth.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/reference/test_compliance_reference.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/reference/test_contract_seam.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/scripts/test_eval_chunking_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/scripts/test_eval_classifier_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/scripts/test_fetch_reference_models.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/scripts/test_generation_robustness_errors.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/skills/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/skills/test_creating_evals_skill_example.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/skills/test_ingestion_skill_example.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_boundary.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_classifier_property_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_clause_classifier_tags_0005.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_clause_function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_clause_function_classifier_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_clause_kg_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_clause_kg_extractor_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_dim_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_dim_fleet_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_function_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_hybrid_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_hybrid_property_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_legalbert_classifier.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_model_capabilities.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_new_function_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_page_map.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_property_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_property_grounding.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_reclassify.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_residual_decision.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_scarce_function_labels.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_segment.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_segmentation_vocab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_semantic_judge.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_setfit_clause_adapter.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_setfit_probabilities.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_span_offsets.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_stage_labels_0005.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_symbolic_validation.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/spans/test_tag_clause_extractor.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_affiliation_backfill.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_clause_kg.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_contract.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_property.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_requirement_sources.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_schema.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_arcadedb_span.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_chunk_text.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_concurrent_writes.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_contract_kg_store_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_document_metadata_live.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_document_scope.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_engine_domain_neutral.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_entities_by_name.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_kg_edges.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_kg_mutations.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_kg_range.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_kg_read.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_kg_write.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_neutral_schema.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_pack_schema_properties.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_store_create_flag.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/store/test_write_graph_idempotent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_async_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_chunk7_structure_carry.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_clause_results.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_compliance_check.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_compliance_ingestion.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_contract_ingestion_pipeline.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_contract_ingestion_pipeline_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_contract_ingestion_pipeline_graph_async.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_graph_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_ingest_knobs.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_ingest_segment_classify.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_intra_document_qa.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_observability.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_partial_entry_contract.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_query_constraint_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_relational_qa.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_requirement_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_scaffold.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_semantic_chunking.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_typed_clause_extraction.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/subgraphs/test_typed_property_retrieval.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/test_backfill_clause_span_id.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/test_dg_model_ab.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/test_populate_clause_kg.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/test_populate_entity_graph.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/util/__init__.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/util/test_concurrent.py +0 -0
- {rag_wright-0.14.1 → rag_wright-0.16.0}/tests/util/test_spacy_model.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: building-a-product-frontend
|
|
3
|
-
description: The architecture and build ORDER for a product front end over a retrieval/agent engine - the core/product seam, generating the API client from the schema, the URL as state of record, one data-access layer, and the three test tiers in the order you need them. Load at the START of a new product's UI, and before changing the shape of an existing one. Craft (composition, a11y, states) is frontend-ui-engineering, which still applies.
|
|
3
|
+
description: The architecture and build ORDER for a product front end over a retrieval/agent engine - the core/product seam, the shell's regions (rail, main, detail, a reserved run row), generating the API client from the schema, the URL as state of record, one data-access layer, and the three test tiers in the order you need them. Load at the START of a new product's UI, and before changing the shape of an existing one. Craft (composition, a11y, states) is frontend-ui-engineering, which still applies.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Building a product front end over an engine
|
|
@@ -47,8 +47,12 @@ src/product/ the domain. Entity names, the operation surfaces, the copy, the r
|
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
**The core reads registries the product populates.** Navigation is the first one: the product declares its
|
|
50
|
-
surfaces
|
|
51
|
-
|
|
50
|
+
surfaces, and ONE entry carries both the route and the navigation, so routes and menu cannot drift into two
|
|
51
|
+
lists: `path`, the `element`, and an optional `nav` of `label` and `end`. **`end` is the field that governs
|
|
52
|
+
correct highlighting**: without it a parent path (`/intake`) also matches its child (`/intake/saved`) and the
|
|
53
|
+
parent stays lit while the child is open. A surface with no `nav` is routed but not advertised (reached from
|
|
54
|
+
an account badge, or a link handed out after a job). The shell renders whatever it is given. The core never
|
|
55
|
+
imports from the product; the product imports from the core.
|
|
52
56
|
|
|
53
57
|
**Enforce it with a scan, not with intent.** A test that greps the core directory for the domain's own words
|
|
54
58
|
-- comments and docstrings included -- and fails on any hit. Two properties make it work:
|
|
@@ -83,7 +87,57 @@ decisions from. Or it can express it, and the configuration is now a programming
|
|
|
83
87
|
checker, no tests and no reviewer. **Generalise the shell, the plumbing and the primitives; write the result
|
|
84
88
|
surfaces.** They are the cheapest part and the part that carries the meaning.
|
|
85
89
|
|
|
86
|
-
## Decision 2:
|
|
90
|
+
## Decision 2: the shell has regions, and they follow from the shape
|
|
91
|
+
|
|
92
|
+
The six things above are functional, but three of them fix the frame's geometry. Draw it before the first
|
|
93
|
+
surface:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
rail | main detail
|
|
97
|
+
rail | run run
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- **`main | detail`** is item 3: a per-item view with the source rendered and its extracted records **beside**
|
|
101
|
+
it. The detail panel is a region of the SHELL, not a page's private layout, so every surface that selects
|
|
102
|
+
something shows it in the same place.
|
|
103
|
+
- **The rail, not a top bar**, is item 2: workspace switching, the library and the account are persistent
|
|
104
|
+
chrome that **grows with the corpus**, and **a horizontal bar cannot grow.** Full height, beside the content.
|
|
105
|
+
- **The run docked BELOW, spanning `main` and `detail`**, is item 5: the agent picks up from a deterministic
|
|
106
|
+
result, so a run must hold a conversation **while the surface it is about stays visible**, and must be able to
|
|
107
|
+
put results into `main` and `detail`, not only into its own transcript. A run that is a mode of `main` fails
|
|
108
|
+
both. A run in its own column fails on width: tool calls need room, and **rail + main + detail + run as four
|
|
109
|
+
columns does not fit at 1440px.** Below, it is a sibling of both.
|
|
110
|
+
- **Reserve the run row from the first commit, though nothing renders there.** One grid line; it buys that no
|
|
111
|
+
surface is written assuming nothing can ever dock below it. The regions themselves are a per-product decision
|
|
112
|
+
to record in your child skill; the argument for them is not.
|
|
113
|
+
|
|
114
|
+
**Mark the current surface, by more than colour, and guard it.** The current navigation item carries
|
|
115
|
+
`aria-current="page"` (a router's `NavLink` sets it; a plain `Link` never does), and its visual echo is not a
|
|
116
|
+
colour swap alone (a border, a weight), because colour alone is the half of a contrast requirement a palette
|
|
117
|
+
cannot satisfy. The guard is a jsdom test: *the current surface has `aria-current="page"`, and a parent with
|
|
118
|
+
`end` does not while its child is open.*
|
|
119
|
+
|
|
120
|
+
**Start from the scaffold; a scan cannot produce a layout.** Every other rule here is checkable by a source
|
|
121
|
+
scan; the frame is the one decision a scan cannot make, so it is the one that defaults to the framework's
|
|
122
|
+
`<header><nav>` above `<main>`. This skill ships the frame as three files in its own folder, `scaffold/` beside
|
|
123
|
+
this file, to copy into your core directory (React, `react-router`, Tailwind with shadcn token names; the tokens
|
|
124
|
+
are yours, the structure is the point):
|
|
125
|
+
|
|
126
|
+
- `scaffold/surfaces.tsx`: the registry type (`path`, `element`, `nav: { label, end }`) and `navigable`
|
|
127
|
+
- `scaffold/ShellLayout.tsx`: the frame -- skip link, the rail (`complementary`, named) holding a named `nav`,
|
|
128
|
+
`main` as its own scroll container, `detail` rendered only when something fills it (an empty landmark sends a
|
|
129
|
+
screen-reader user nowhere), the run row reserved
|
|
130
|
+
- `scaffold/ShellLayout.test.tsx`: the jsdom guards -- the current surface, `end`, the rail, one `main`, no
|
|
131
|
+
empty detail
|
|
132
|
+
|
|
133
|
+
Two things only the browser tier can assert, so assert them there: **the detail panel is BESIDE `main`, not
|
|
134
|
+
under it** (the grid declares a third column only when `detail` exists; with two columns declared, the panel
|
|
135
|
+
auto-places into the run row, full width under `main`, and jsdom computes no grid to notice), and **`main` is
|
|
136
|
+
wider than the panel beside it** (the panel's width is capped; uncapped, it measured 608px against `main`'s 576px
|
|
137
|
+
at 1440px). Copy, then customise. **Do not make the shell configurable**: Decision 1's argument against
|
|
138
|
+
config-driven surfaces applies unchanged one level up.
|
|
139
|
+
|
|
140
|
+
## Decision 3: GENERATE the API client from the schema
|
|
87
141
|
|
|
88
142
|
If the backend publishes a machine-readable schema -- and a modern Python or TypeScript backend does, for
|
|
89
143
|
free -- **the client is generated, never hand-mirrored.**
|
|
@@ -103,7 +157,7 @@ The discipline that makes generation work in practice:
|
|
|
103
157
|
- **Change the client type in the SAME commit as the backend type.** A field that became optional while the
|
|
104
158
|
client still types it as required is a dereference that survives a full green suite and a clean build.
|
|
105
159
|
|
|
106
|
-
## Decision
|
|
160
|
+
## Decision 4: the URL is the state of record
|
|
107
161
|
|
|
108
162
|
Page, filters, sort, selection, which panel is open, which tab is active -- all of it in the URL, none of it
|
|
109
163
|
in component state.
|
|
@@ -117,7 +171,7 @@ cannot hand back.
|
|
|
117
171
|
guard; what fails is the deferral with a named trigger that nobody checks. If you defer, write the trigger
|
|
118
172
|
down where the next person will look, not only in the ticket.
|
|
119
173
|
|
|
120
|
-
## Decision
|
|
174
|
+
## Decision 5: one data-access layer, two guards
|
|
121
175
|
|
|
122
176
|
A query-key factory is the only place keys are built; no component calls `fetch` directly. Both guards are a
|
|
123
177
|
source scan, both take minutes, and both are provable by planting their violation:
|
|
@@ -128,7 +182,7 @@ source scan, both take minutes, and both are provable by planting their violatio
|
|
|
128
182
|
A library's own `refetch()` goes *through* the layer and is the opposite of a violation -- make sure the
|
|
129
183
|
guard knows the difference, or it will be disabled by the first person it annoys.
|
|
130
184
|
|
|
131
|
-
## Decision
|
|
185
|
+
## Decision 6: one table primitive, and the allow-list that must not grow
|
|
132
186
|
|
|
133
187
|
Build the table once, and allow a raw `<table>` element in exactly that one file. Everything else that needs
|
|
134
188
|
a table uses the primitive; if the primitive cannot do it, extend the primitive.
|
|
@@ -224,10 +278,12 @@ Doing these out of order is what costs the rework:
|
|
|
224
278
|
component exists.
|
|
225
279
|
2. **Generate the client.** Before any surface. Everything downstream types against it.
|
|
226
280
|
3. **The data-access layer and its two guards.** Cheap now, an audit later.
|
|
227
|
-
4. **
|
|
281
|
+
4. **The shell: the regions (Decision 2, from the scaffold), the navigation registry, theme tokens.** Before
|
|
282
|
+
any surface hangs on it, or the surfaces invent minimal chrome and the shell step reads as already done.
|
|
283
|
+
Resist centring the content region, since a detail panel sits beside it -- make each surface constrain its
|
|
284
|
+
own measure, and assert it.
|
|
285
|
+
5. **Identity and tenancy surfaces.** They are the most portable code you will write and they exercise the
|
|
228
286
|
shell, routing and the session end to end.
|
|
229
|
-
5. **The shell: regions, navigation registry, theme tokens.** Resist centring the content region if a detail
|
|
230
|
-
panel will ever sit beside it -- then make each surface constrain its own measure, and assert it.
|
|
231
287
|
6. **The table primitive**, with its allow-list guard, before the second listing.
|
|
232
288
|
7. **The browser-tier harness** -- own database, real provisioning, build, serve, rebuild per run.
|
|
233
289
|
8. **The first corpus surface** (upload, progress, library, detail). This is where ingestion contracts get
|
|
@@ -245,6 +301,7 @@ reader cannot derive:
|
|
|
245
301
|
- your locked decisions, with what a violation looks like, and the fact that changing one needs a recorded
|
|
246
302
|
decision rather than a judgement call
|
|
247
303
|
- your primitives, by path: the table, the shell, the query-key factory, the states helper
|
|
304
|
+
- which regions your shell has and what fills `detail` and the run row, as a locked decision
|
|
248
305
|
- the commands: how to run each tier, where specs live, what the e2e server script does
|
|
249
306
|
- the defects that have actually recurred in **your** codebase, with the evidence that makes them stick
|
|
250
307
|
- current debts: a guard that was deferred, a decision made but not yet built
|
|
@@ -258,6 +315,9 @@ an architecture document is a decision that gets violated with the document alre
|
|
|
258
315
|
- [ ] Nothing in the core imports from the product
|
|
259
316
|
- [ ] The API client is generated from the published schema, committed, and regenerated in CI
|
|
260
317
|
- [ ] Any client type mirroring a backend contract changed in the SAME commit as the backend
|
|
318
|
+
- [ ] The regions (rail, main, detail, the reserved run row) are the SHELL's, not a page's own layout
|
|
319
|
+
- [ ] The current surface carries `aria-current="page"` and is marked by more than colour; a parent with `end`
|
|
320
|
+
is not lit while its child is open
|
|
261
321
|
- [ ] Navigation-shaped state is in the URL, not component state
|
|
262
322
|
- [ ] Reads go through the query-key factory; no `fetch(` in a component
|
|
263
323
|
- [ ] No raw table outside the primitive; the allow-list did not grow
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shell's decisions, each with its guard (jsdom tier). What jsdom cannot see -- that the detail panel sits
|
|
3
|
+
* BESIDE `main` rather than under it, and the 44px hit areas -- is asserted in the browser tier.
|
|
4
|
+
*/
|
|
5
|
+
import { cleanup, render, screen } from '@testing-library/react'
|
|
6
|
+
import { MemoryRouter, Route, Routes } from 'react-router'
|
|
7
|
+
import { afterEach, describe, expect, it } from 'vitest'
|
|
8
|
+
|
|
9
|
+
import ShellLayout from './ShellLayout'
|
|
10
|
+
import type { Surface } from './surfaces'
|
|
11
|
+
|
|
12
|
+
// Explicit, so the file does not depend on the runner's `globals` setting for testing-library's auto-cleanup.
|
|
13
|
+
afterEach(cleanup)
|
|
14
|
+
|
|
15
|
+
const SURFACES: Surface[] = [
|
|
16
|
+
{ path: '/alpha', element: <div>alpha surface</div>, nav: { label: 'Alpha', end: true } },
|
|
17
|
+
{ path: '/alpha/saved', element: <div>saved surface</div>, nav: { label: 'Saved' } },
|
|
18
|
+
{ path: '/beta', element: <div>beta surface</div>, nav: { label: 'Beta' } },
|
|
19
|
+
// No `nav`: routed, but reached from somewhere other than the navigation.
|
|
20
|
+
{ path: '/hidden', element: <div>hidden surface</div> },
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
function renderShell(path: string, detail?: React.ReactNode) {
|
|
24
|
+
return render(
|
|
25
|
+
<MemoryRouter initialEntries={[path]}>
|
|
26
|
+
<Routes>
|
|
27
|
+
<Route element={<ShellLayout surfaces={SURFACES} productName="Testproduct" detail={detail} />}>
|
|
28
|
+
{SURFACES.map((surface) => (
|
|
29
|
+
<Route key={surface.path} path={surface.path} element={surface.element} />
|
|
30
|
+
))}
|
|
31
|
+
</Route>
|
|
32
|
+
</Routes>
|
|
33
|
+
</MemoryRouter>,
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const current = (name: string) => screen.getByRole('link', { name }).getAttribute('aria-current')
|
|
38
|
+
|
|
39
|
+
describe('navigation', () => {
|
|
40
|
+
it('renders a link for every surface that declares navigation, and none for one that does not', () => {
|
|
41
|
+
renderShell('/hidden')
|
|
42
|
+
const nav = screen.getByRole('navigation', { name: 'Surfaces' })
|
|
43
|
+
expect(nav.textContent).toContain('Alpha')
|
|
44
|
+
expect(nav.textContent).not.toContain('hidden')
|
|
45
|
+
expect(screen.getByText('hidden surface')).toBeTruthy()
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('marks the current surface with aria-current, not with colour alone', () => {
|
|
49
|
+
renderShell('/beta')
|
|
50
|
+
expect(current('Beta')).toBe('page')
|
|
51
|
+
expect(current('Alpha')).toBeNull()
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('does not leave a parent lit while its child is open (`end`)', () => {
|
|
55
|
+
renderShell('/alpha/saved')
|
|
56
|
+
expect(current('Saved')).toBe('page')
|
|
57
|
+
expect(current('Alpha')).toBeNull()
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
describe('the regions', () => {
|
|
62
|
+
it('puts navigation in the RAIL, beside the content rather than in a bar above it', () => {
|
|
63
|
+
renderShell('/alpha')
|
|
64
|
+
const rail = screen.getByRole('complementary', { name: 'Workspace' })
|
|
65
|
+
expect(rail.contains(screen.getByRole('navigation', { name: 'Surfaces' }))).toBe(true)
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('renders exactly one main landmark', () => {
|
|
69
|
+
renderShell('/alpha')
|
|
70
|
+
expect(screen.getAllByRole('main')).toHaveLength(1)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it('renders NO detail region until something fills it', () => {
|
|
74
|
+
renderShell('/alpha')
|
|
75
|
+
expect(screen.queryByRole('complementary', { name: 'Details' })).toBeNull()
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('renders the detail region a surface provides', () => {
|
|
79
|
+
renderShell('/alpha', <p>the selected object</p>)
|
|
80
|
+
expect(screen.getByRole('complementary', { name: 'Details' }).textContent).toContain('the selected object')
|
|
81
|
+
})
|
|
82
|
+
})
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
import { NavLink, Outlet } from 'react-router' // `react-router-dom` on an older router: change this line only
|
|
3
|
+
|
|
4
|
+
import { navigable, type Surface } from './surfaces'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The application frame: `rail | main | detail`, with a fourth area reserved below.
|
|
8
|
+
*
|
|
9
|
+
* rail | main detail
|
|
10
|
+
* rail | run run
|
|
11
|
+
*
|
|
12
|
+
* Core, not product: it is given its surfaces and its name and knows neither, which is what lets a second
|
|
13
|
+
* application import this rather than copy it. The colour names are shadcn token names; the tokens are the
|
|
14
|
+
* product's, the structure is the point.
|
|
15
|
+
*
|
|
16
|
+
* **The run area is RESERVED, not built.** Nothing renders there until an agent run exists. Reserving costs
|
|
17
|
+
* one grid line; it buys that no surface is written assuming nothing can ever dock below it.
|
|
18
|
+
*/
|
|
19
|
+
export default function ShellLayout({ surfaces, productName, footer, detail }: {
|
|
20
|
+
surfaces: Surface[]
|
|
21
|
+
/** Supplied by the caller: the core must not know whose application it is drawing. */
|
|
22
|
+
productName: string
|
|
23
|
+
/** The foot of the rail: which account and workspace you are in is not a detail to drop. */
|
|
24
|
+
footer?: ReactNode
|
|
25
|
+
/**
|
|
26
|
+
* The panel for the currently selected object. **Absent until something fills it.** An empty landmark is
|
|
27
|
+
* worse than no landmark: a screen-reader user would find "Details", jump to it and arrive nowhere.
|
|
28
|
+
*/
|
|
29
|
+
detail?: ReactNode
|
|
30
|
+
}) {
|
|
31
|
+
return (
|
|
32
|
+
<div className={[
|
|
33
|
+
'min-h-screen lg:grid lg:grid-rows-[1fr_auto]',
|
|
34
|
+
// **The third column exists only when `detail` does, and that is not tidiness.** Row 2 is reserved for
|
|
35
|
+
// the run, so with two columns declared the detail panel -- the third child -- auto-places into the RUN
|
|
36
|
+
// slot: underneath `main`, full width, off-screen. jsdom computes no grid, so assert in the BROWSER that
|
|
37
|
+
// the panel is beside `main`.
|
|
38
|
+
detail === undefined
|
|
39
|
+
? 'lg:grid-cols-[16rem_minmax(0,1fr)]'
|
|
40
|
+
// Capped, so `main` takes every pixel a wider viewport adds. An uncapped panel ends up wider than the
|
|
41
|
+
// content beside it (measured: 608px against 576px at 1440px).
|
|
42
|
+
: 'lg:grid-cols-[16rem_minmax(0,1fr)_minmax(20rem,26rem)]',
|
|
43
|
+
].join(' ')}>
|
|
44
|
+
{/* The first tab stop, so a keyboard user is not forced through the whole navigation on every surface. */}
|
|
45
|
+
<a href="#main" className="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:rounded focus:bg-primary focus:px-3 focus:py-2 focus:text-sm focus:text-primary-foreground">
|
|
46
|
+
Skip to content
|
|
47
|
+
</a>
|
|
48
|
+
|
|
49
|
+
{/* **The RAIL.** Persistent, full height beside the content rather than a bar above it: it carries
|
|
50
|
+
workspace switching and the library, which GROW, and a horizontal bar cannot grow. `complementary`
|
|
51
|
+
rather than `navigation` because it holds more than links. */}
|
|
52
|
+
<aside aria-label="Workspace" className="flex flex-col gap-4 border-b border-border p-4 lg:row-span-2 lg:h-screen lg:overflow-y-auto lg:border-b-0 lg:border-r">
|
|
53
|
+
<span className="text-sm font-semibold tracking-tight">{productName}</span>
|
|
54
|
+
|
|
55
|
+
{/* Named, so it is a landmark a screen reader can jump to rather than an anonymous group. */}
|
|
56
|
+
<nav aria-label="Surfaces" className="flex flex-wrap gap-1 lg:flex-col lg:flex-nowrap">
|
|
57
|
+
{navigable(surfaces).map((surface) => (
|
|
58
|
+
<NavLink key={surface.path} to={surface.path} end={surface.nav?.end} className={navLinkClass}>
|
|
59
|
+
{surface.nav?.label}
|
|
60
|
+
</NavLink>
|
|
61
|
+
))}
|
|
62
|
+
</nav>
|
|
63
|
+
|
|
64
|
+
{/* `mt-auto`: at the foot of a tall rail, simply after the navigation on a short one. */}
|
|
65
|
+
{footer === undefined ? null : <div className="lg:mt-auto">{footer}</div>}
|
|
66
|
+
</aside>
|
|
67
|
+
|
|
68
|
+
{/* Its own scroll container, so a long surface scrolls under a rail that stays put. */}
|
|
69
|
+
<main id="main" className="min-w-0 lg:h-screen lg:overflow-y-auto">
|
|
70
|
+
<Outlet />
|
|
71
|
+
</main>
|
|
72
|
+
|
|
73
|
+
{detail === undefined ? null : (
|
|
74
|
+
<aside aria-label="Details" className="min-w-0 border-t border-border p-4 lg:h-screen lg:overflow-y-auto lg:border-l lg:border-t-0">
|
|
75
|
+
{detail}
|
|
76
|
+
</aside>
|
|
77
|
+
)}
|
|
78
|
+
</div>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function navLinkClass({ isActive }: { isActive: boolean }): string {
|
|
83
|
+
// **The current surface is marked by `aria-current="page"`, which NavLink sets itself; this class is the
|
|
84
|
+
// visual echo.** The marker is a BORDER, not only a colour swap, so it stays legible in greyscale -- the half
|
|
85
|
+
// of a contrast requirement a palette cannot satisfy. `min-h-11` is 44px, the minimum hit area.
|
|
86
|
+
const base = 'inline-flex min-h-11 items-center rounded-md border-l-2 px-3 text-sm font-medium transition-colors'
|
|
87
|
+
return isActive
|
|
88
|
+
? `${base} border-foreground bg-accent text-foreground`
|
|
89
|
+
: `${base} border-transparent text-muted-foreground hover:bg-accent/50 hover:text-foreground`
|
|
90
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* One addressable surface of the application: the registry the PRODUCT populates and the shell only reads.
|
|
5
|
+
*
|
|
6
|
+
* One entry carries BOTH the route and the navigation, so the two cannot drift into separate lists that
|
|
7
|
+
* disagree about which pages exist. `nav` is optional: a surface reached from somewhere other than a menu
|
|
8
|
+
* (an account badge, a link handed out after a long-running job) is routed without being advertised.
|
|
9
|
+
*/
|
|
10
|
+
export type Surface = {
|
|
11
|
+
/** The address. Surfaces are addressable so a reload, a back button or an agent's link returns to it. */
|
|
12
|
+
path: string
|
|
13
|
+
element: ReactNode
|
|
14
|
+
nav?: {
|
|
15
|
+
label: string
|
|
16
|
+
/**
|
|
17
|
+
* `end` so a parent path does not stay highlighted while a child is open. Without it `/intake` matches
|
|
18
|
+
* `/intake/saved` too, and the wrong item stays lit beside the right one.
|
|
19
|
+
*/
|
|
20
|
+
end?: boolean
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** The navigable subset, in registry order. */
|
|
25
|
+
export function navigable(surfaces: Surface[]): Surface[] {
|
|
26
|
+
return surfaces.filter((surface) => surface.nav !== undefined)
|
|
27
|
+
}
|
{rag_wright-0.14.1 → rag_wright-0.16.0}/.claude/skills/specifying-a-product-on-the-engine/SKILL.md
RENAMED
|
@@ -58,7 +58,7 @@ Every product item lands in one or more of these. The route column is where the
|
|
|
58
58
|
| **Domain knowledge**: vocabulary, schema, constraints, synonyms, decision criteria | "controlled vocabularies", "the ontology", "mandatory fields", "valid ranges" | `EngineConfig(pack=...)` (the store creates the declared types on `open_workspace`); your capabilities read value sets and SHACL shapes with `rdflib` / `pyshacl` | `authoring-a-capability` | ontology authoring |
|
|
59
59
|
| **Ingestion**: documents, spreadsheets, images, embedded files into the graph | "parse the forms", "load the lab reports", "idempotent re-runs" | `build_ingestion` (your extractor + optional hooks) → `aingest`; `IngestSource`, `IngestionTuning`, `table_rows` / `TableRow`, `evaluate_ingestion`, `check_extraction`; `KgNode` / `KgEdge` | `building-an-ingestion-capability` | KG construction |
|
|
60
60
|
| **Entity and registry resolution** | "resolve against the yarn register", "queue unresolved mentions" | your `document_hook`; the entity-resolution building blocks on `rag_wright.pack_sdk` | `building-an-ingestion-capability` | entity resolution |
|
|
61
|
-
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, `Range`, hybrid span search with `span_search` from `rag_wright.api`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
|
|
61
|
+
| **A typed query or retrieval** | "find similar cases", "filter the table", "the dossier" | a query capability of your pack composing the primitives (`kg_read`, `kg_edges`, `NOT_NULL`, `Range`, `Contains`, hybrid span search with `span_search` from `rag_wright.api`), registered with `CapabilityManifest` + `register_capability` / `load_pack`, invoked with `ainvoke_subgraph` | `authoring-a-capability` | authoring capabilities |
|
|
62
62
|
| **A cited answer, or a refusal** | "every answer cites its source", "say when it is not in the records" | `agenerate_answer` over `EvidenceItem`s (an answer states its support; "none" abstains), `ajudge_spans` | `authoring-a-capability` | concepts (answers) |
|
|
63
63
|
| **A typed decision or classification** | "classify the structure", "which of these is it" | `classifier-opportunity-analysis` first; then rules, a trained classifier, or the decision model (`jev_decision` from `engine_capabilities()`, criteria in the pack) | `classifier-opportunity-analysis` → `setfit` / `laya` | classification and decision models |
|
|
64
64
|
| **A deterministic workflow behind a button** (mode **D**) | "upload, confirm, save", "export CSV" | a product **operation** (one function per user operation) calling your capabilities; the route calls the operation | `building-a-product-backend` | domain-adaptation step 8 |
|
|
@@ -28,8 +28,8 @@ open-core and domain-neutral; your product brings the domain. Hard rules:
|
|
|
28
28
|
(`temporary_workspace`/`drop_workspace` for disposable and removed databases), the invokers
|
|
29
29
|
(`ainvoke_subgraph`/`invoke_model`/`ainvoke_model`), discovery (`capability_index`/`discover`), the KG accessors
|
|
30
30
|
(`kg_read`, `kg_write`, `kg_edges`, `kg_count`/`kg_delete`/`kg_update`, all filtering by `where` values that
|
|
31
|
-
are equality, a list for membership, `NOT_NULL
|
|
32
|
-
evaluated in the store;
|
|
31
|
+
are equality, a list for membership, `NOT_NULL`, a `Range(gt=, ge=, lt=, le=)` or a `Contains(text, case_sensitive=False)` (a literal
|
|
32
|
+
substring; an empty field never matches) on any number of fields, evaluated in the store;
|
|
33
33
|
`entities_by_name`, `span_positions`), hybrid span search (`span_search` / `aspan_search`: cited spans from
|
|
34
34
|
the dense and sparse index, fused in the store), `pack_store(ws, cls)` (build your pack's store extension over the
|
|
35
35
|
workspace's store; the store itself stays private), metering and tracing (`measure_usage`, `record_usage`,
|
|
@@ -4,6 +4,32 @@ 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.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.15.0...0.16.0) (2026-10-28)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **PS-54:** a Contains where value matches a substring of a text field in the store ([e00b9e2](https://github.com/fzaidi-dai/RAG_Wright/commit/e00b9e271f7185cf5c15a0312d2e76c7c1eb68c6))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **PS-55:** only the BGE models run on Metal, one call at a time per process ([1cb1c90](https://github.com/fzaidi-dai/RAG_Wright/commit/1cb1c90ccc1d5e93421806c26862ab97d503bb72))
|
|
18
|
+
* **PS-56:** the BGE reranker scores again on transformers 5 ([d06ec1b](https://github.com/fzaidi-dai/RAG_Wright/commit/d06ec1b97ad4ae457a232ba9f1bb5e89b033513b))
|
|
19
|
+
|
|
20
|
+
## [0.15.0](https://github.com/fzaidi-dai/RAG_Wright/compare/0.14.1...0.15.0) (2026-10-28)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **PS-51:** building-a-product-frontend draws the shell and ships its scaffold ([a16df0e](https://github.com/fzaidi-dai/RAG_Wright/commit/a16df0e8903cd43bf639ec3e2be11ae2bb242b08))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* **PS-52:** a workspace builds one embedder however many threads use it first ([8e1617c](https://github.com/fzaidi-dai/RAG_Wright/commit/8e1617cee110fd909634b818ae2b6850d26a5a53))
|
|
31
|
+
* **PS-53:** KG calls refuse a type or field name that is not an identifier ([12e55fa](https://github.com/fzaidi-dai/RAG_Wright/commit/12e55fa58739d22a3e01ee6187c7efd2a932cb27))
|
|
32
|
+
|
|
7
33
|
## [0.14.1](https://github.com/fzaidi-dai/RAG_Wright/compare/0.14.0...0.14.1) (2026-10-28)
|
|
8
34
|
|
|
9
35
|
|
|
@@ -55,7 +55,11 @@ 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-28): `rag-wright` 0.15.0 is RELEASED** (PR #18; PS-51 the frontend skill draws the shell and
|
|
59
|
+
> ships its scaffold, RuleWright's request; PS-52 one workspace embedder under concurrent first use and PS-53 KG calls refuse
|
|
60
|
+
> 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
|
+
> ArcadeDB write conflict no longer prints as an error, PS-50 `ensure_pack_schema` declares a property a pack gains on an
|
|
62
|
+
> existing type). Before it, **(2026-10-17): the LangGraph ingestion workstream is RELEASED as `rag-wright` 0.14.0** (PR #16; LGI-1..5,
|
|
59
63
|
> `docs/specs/langgraph-ingestion/plan.md`, ADR-0124 amended): `build_ingestion` is a LangGraph graph
|
|
60
64
|
> (`IngestionPipeline.graph`, per-document `document_graph`), `aingest(..., checkpointer=, run_id=)` resumes an
|
|
61
65
|
> interrupted run (built-in state, strict msgpack safe), `IngestionReport.from_dict`; live old-vs-new parity identical;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rag-wright
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
4
4
|
Summary: A domain-retargetable, open-core engine for hybrid retrieval + knowledge-graph RAG: parsing, chunking, embedding, hybrid search, reranking, graph extraction, entity resolution, ontology-driven knowledge, and a capability runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fzaidi-dai/RAG_Wright
|
|
6
6
|
Project-URL: Repository, https://github.com/fzaidi-dai/RAG_Wright
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ADR-0140: One model family on Metal, under one process lock
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-10-29 · **Related:** PS-55, TexWright's request
|
|
4
|
+
`2026-10-25-two-model-families-in-one-process-abort-on-metal.md`, RuleWright T-7.25 / T-7.46 (`_avoid_mps`), ADR-0076
|
|
5
|
+
(issue 0016, the per-instance embedder lock), ADR-0138 (pdfium)
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
PyTorch's Apple Metal (`mps`) backend is not safe for concurrent use. Two threads running models on it abort the
|
|
10
|
+
process inside Metal (`failed assertion _status < MTLCommandBufferStatusCommitted ... setCurrentCommandEncoder:`) or
|
|
11
|
+
segfault it. Either way it is a native `abort()`, so nothing in Python can catch it.
|
|
12
|
+
|
|
13
|
+
The engine reached Metal from three model families, each choosing its own device automatically:
|
|
14
|
+
|
|
15
|
+
- the BGE-M3 embedder (`_resolve_device`);
|
|
16
|
+
- the BGE reranker (FlagEmbedding's choice);
|
|
17
|
+
- Docling's layout, table and RapidOCR-torch models (`AcceleratorOptions(device="auto")`).
|
|
18
|
+
|
|
19
|
+
It also runs them on different threads: an ingest embeds one document while it parses another, and a server embeds
|
|
20
|
+
a query while an upload parses. Issue 0016's per-instance locks do not help across instances or families.
|
|
21
|
+
|
|
22
|
+
Reproduced with the BGE-M3 embedder in one thread and Docling in another, each run in a child process:
|
|
23
|
+
|
|
24
|
+
- On torch 2.14.1 (TexWright's environment), 6 of 6 runs died within seconds: 5 SIGABRT with TexWright's
|
|
25
|
+
assertion, 1 SIGSEGV. Three of the runs OCR'd a screen image and three parsed PDFs.
|
|
26
|
+
- On torch 2.12.1 the same shapes survived every run, so the failure depends on the torch version, and the newer
|
|
27
|
+
version makes it certain.
|
|
28
|
+
- RuleWright measured it independently on their contract ingest: 4 crashes in about 8 runs on Metal, 0 in 6 on CPU.
|
|
29
|
+
They fixed it in their own seam (`_avoid_mps`), and the engine never adopted the fix.
|
|
30
|
+
|
|
31
|
+
`docs/workspaces.md` claimed that concurrent calls in one process are safe without qualification.
|
|
32
|
+
|
|
33
|
+
## Decision
|
|
34
|
+
|
|
35
|
+
- **`rag_wright.util.devices`** owns the engine's device policy. Unless told otherwise, it uses CUDA when present.
|
|
36
|
+
On Metal it allows only the BGE family (the embedder and the reranker, the hot path, about 2x faster there).
|
|
37
|
+
Everything else goes to CPU.
|
|
38
|
+
- **Docling** runs on CPU where its `auto` would pick Metal. The engine passes the device explicitly, because
|
|
39
|
+
Docling's default options are built once at import. Docling's output is identical on CPU and Metal (measured on
|
|
40
|
+
the engine's fixtures).
|
|
41
|
+
- **The reference pack's classifiers** (SetFit, Laya) follow the same policy. Packs get it through
|
|
42
|
+
`pack_sdk.torch_device`, which never picks Metal unless asked.
|
|
43
|
+
- **On Metal, every BGE call holds `METAL_LOCK`**, one re-entrant lock per process. Two embedders, or an embedder
|
|
44
|
+
and the reranker, never run on Metal at once. Off Metal each instance keeps its own lock (issue 0016), so a CUDA
|
|
45
|
+
host loses no concurrency.
|
|
46
|
+
- **Explicit choices always win**, `mps` included: `EMBED_DEVICE` (the whole BGE family), `DOCLING_DEVICE`,
|
|
47
|
+
`RAG_SETFIT_DEVICE`, and any `device=` argument. This keeps the crash reproducible, and it means an operator who
|
|
48
|
+
puts a second family on Metal gives up the guarantee.
|
|
49
|
+
|
|
50
|
+
## Consequences
|
|
51
|
+
|
|
52
|
+
- A product needs no process-per-pipeline workaround. A server may stage an upload's ingest beside query traffic.
|
|
53
|
+
RuleWright can delete `_avoid_mps`, and TexWright can delete its spawned-process seed and the skipped browser test.
|
|
54
|
+
- On Apple Silicon, Docling parses and the pack classifiers run on CPU (slower than Metal), and BGE calls from
|
|
55
|
+
different instances queue behind one another. A CUDA or CPU-only host is unchanged.
|
|
56
|
+
- The rule holds only while engine code chooses the devices. A product's own torch model should take its device from
|
|
57
|
+
`pack_sdk.torch_device`, or it must stay off Metal.
|
|
@@ -195,4 +195,5 @@ framing that still appears in older ADRs and the root `SPEC.md`/`plan.md`.
|
|
|
195
195
|
0136 A spreadsheet table cut at its blank rows is glued back together after the parse ·
|
|
196
196
|
0137 A generated answer states the evidence's support every time, and "none" is an abstention ·
|
|
197
197
|
0138 PDF parses run one at a time, and the engine reaches pdfium through one locked door ·
|
|
198
|
-
0139 The agent harness substrate is engine scope
|
|
198
|
+
0139 The agent harness substrate is engine scope ·
|
|
199
|
+
0140 One model family on Metal, under one process lock
|
|
@@ -88,6 +88,10 @@ A `where` value meaning a comparison, evaluated in the store (ER-1): `gt` (>), `
|
|
|
88
88
|
|
|
89
89
|
`[(operator, bound), ...]`, lower bound first.
|
|
90
90
|
|
|
91
|
+
### `Contains(text: 'str', case_sensitive: 'bool' = False) -> None`
|
|
92
|
+
|
|
93
|
+
A `where` value meaning "this string field contains `text`", evaluated in the store (PS-54). The match is literal (`%`, `_` and `?` are ordinary characters), case-insensitive unless `case_sensitive=True`, and a field with no value never matches. It composes with equality, membership, `NOT_NULL` and `Range` on every KG call that takes `where`: `where={"composition": Contains("UHMWPE"), "gsm": Range(ge=250, le=320)}`.
|
|
94
|
+
|
|
91
95
|
### `BlankPageText(*, source: str, pages: dict[int, str], cache_files: list[str]) -> None`
|
|
92
96
|
|
|
93
97
|
One cached parse with text on blank pages. `source` is the PDF's path (or the name given with its bytes), `pages` maps each blank page to the text the cached parse holds there, and `cache_files` are the cached parse(s) and their OCR sidecar: delete them, then re-ingest the document so it is parsed again.
|
|
@@ -424,7 +428,7 @@ Rank the live ARD catalog by semantic match to `query`; return the top `k` (opti
|
|
|
424
428
|
|
|
425
429
|
### `kg_read(ws: 'WorkspaceHandle', node_type: 'str', *, where: 'Optional[dict]' = None, fields: 'Optional[list]' = None, distinct: 'Optional[str]' = None, order_by: 'Optional[str]' = None, limit: 'Optional[int]' = None, key_range: 'Optional[tuple]' = None) -> 'list[dict]'`
|
|
426
430
|
|
|
427
|
-
Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence)
|
|
431
|
+
Read typed nodes of `node_type` from the workspace (see `Store.kg_read`). Each `where` value is a scalar (equality), a list (membership; an empty list is scope-to-nothing -> `[]`), `NOT_NULL` (presence), a `Range` (comparisons, on any number of fields: `{"weight": Range(ge=180, le=220), "tensile": Range(gt=400)}`) or a `Contains` (a literal substring, case-insensitive unless `case_sensitive=True`; an empty field never matches: `{"composition": Contains("UHMWPE")}`); all filters are AND-ed and evaluated in the store. `key_range=(field, lo, hi)` is the half-open shorthand (`lo <= field < hi`). Then projection, distinct, order and limit. Every name is checked, never interpolated unchecked (the module docstring): a request-chosen field is safe, but an unknown one matches nothing.
|
|
428
432
|
|
|
429
433
|
### `kg_write(ws: 'WorkspaceHandle', nodes: 'list', edges: 'Any' = ()) -> 'None'`
|
|
430
434
|
|
|
@@ -436,7 +440,7 @@ Generic edge TRAVERSAL over the workspace (see `Store.kg_edges`): node-start out
|
|
|
436
440
|
|
|
437
441
|
### `kg_count(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
|
|
438
442
|
|
|
439
|
-
The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`); `where` as in `kg_read`, `Range` values included.
|
|
443
|
+
The number of vertices or edges of `type_name` matching `where` / `key_range` (see `Store.kg_count`); `where` as in `kg_read`, `Range` and `Contains` values included.
|
|
440
444
|
|
|
441
445
|
### `kg_delete(ws: 'WorkspaceHandle', type_name: 'str', *, where: 'Optional[dict]' = None, key_range: 'Optional[tuple]' = None) -> 'int'`
|
|
442
446
|
|
|
@@ -456,7 +460,7 @@ Every span of `document` with its position provenance, ordered by document posit
|
|
|
456
460
|
|
|
457
461
|
### `span_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
|
|
458
462
|
|
|
459
|
-
Hybrid search over the workspace's span index (every ingested span, embedded dense and sparse): the two legs fused by Reciprocal Rank Fusion in the store, with the top `dense_floor` pure-dense spans guaranteed a place, so a strong semantic match a common-token query would push out of the fused pool is kept (0 turns it off). Returns up to `k` `SpanHit`s, best first, each citation-ready: `span_id`, `text`, `document_id`, `doc_start` / `doc_end`, `pages`, `bbox`, `primary_tag`, `rank`, and `found_by` (`"hybrid"` and/or `"dense"`). `documents` scopes it to those source documents in the store (`None` = all, `[]` = nothing); `tag` keeps one primary tag. No reranking: compose `BGEReranker` over the hits if you want one. Raises `RuntimeError` when the workspace has no embedder.
|
|
463
|
+
Hybrid search over the workspace's span index (every ingested span, embedded dense and sparse): the two legs fused by Reciprocal Rank Fusion in the store, with the top `dense_floor` pure-dense spans guaranteed a place, so a strong semantic match a common-token query would push out of the fused pool is kept (0 turns it off). Returns up to `k` `SpanHit`s, best first, each citation-ready: `span_id`, `text`, `document_id`, `doc_start` / `doc_end`, `pages`, `bbox`, `primary_tag`, `rank`, and `found_by` (`"hybrid"` and/or `"dense"`). `documents` scopes it to those source documents in the store (`None` = all, `[]` = nothing); `tag` keeps one primary tag. No reranking: compose `BGEReranker` over the hits if you want one. Raises `RuntimeError` when the workspace has no embedder. Safe to call from several threads or requests at once: it shares the workspace's one embedder, which is thread-safe (PS-52).
|
|
460
464
|
|
|
461
465
|
### `aspan_search(ws: 'WorkspaceHandle', query: 'str', *, k: 'int' = 10, documents: 'Optional[list]' = None, tag: 'Optional[str]' = None, dense_floor: 'int' = 3) -> 'list'`
|
|
462
466
|
|
|
@@ -116,11 +116,11 @@ Write the document's nodes/edges (one transaction), unless an unchanged run alre
|
|
|
116
116
|
|
|
117
117
|
The graph query capability's output: candidate answers as evidence for fusion (FR-C.5, FR-Q.3).
|
|
118
118
|
|
|
119
|
-
### `BGEReranker(model_name: 'str' = 'BAAI/bge-reranker-v2-m3', *, use_fp16: 'bool' = False, model: 'object | None' = None) -> 'None'`
|
|
119
|
+
### `BGEReranker(model_name: 'str' = 'BAAI/bge-reranker-v2-m3', *, use_fp16: 'bool' = False, device: 'str | None' = None, model: 'object | None' = None) -> 'None'`
|
|
120
120
|
|
|
121
|
-
The real reranker: `
|
|
121
|
+
The real reranker: a `sentence_transformers.CrossEncoder` over `bge-reranker-v2-m3` (PS-56), scoring raw logits (no activation), 512 tokens per pair as before.
|
|
122
122
|
|
|
123
|
-
THREAD-SAFE (engine issue 0016): FlagEmbedding
|
|
123
|
+
THREAD-SAFE (engine issue 0016): a shared reranker is guarded by an instance lock -- defense-in-depth for any concurrent `score` caller (its FlagEmbedding predecessor mutated the model in place on every call). It is in the BGE family: its device follows the embedder's (`EMBED_DEVICE`), and on Metal its lock is the process-wide one the embedders hold (PS-55), so a rerank never runs on Metal beside an embed.
|
|
124
124
|
|
|
125
125
|
#### `BGEReranker.score(self, query: 'str', passages: 'list[str]') -> 'list[float]'`
|
|
126
126
|
|
|
@@ -358,6 +358,10 @@ True when at least one usage scope is active — the seam checks this to decide
|
|
|
358
358
|
|
|
359
359
|
The models root (see the module docstring for the resolution order).
|
|
360
360
|
|
|
361
|
+
### `torch_device(explicit: 'Optional[str]' = None, *, env: 'Optional[str]' = None, metal: 'bool' = False) -> 'str'`
|
|
362
|
+
|
|
363
|
+
The device for one engine model: `explicit`, else the `env` variable, else CUDA when present, else Metal only for the family allowed on it (`metal=True`, the BGE family), else CPU.
|
|
364
|
+
|
|
361
365
|
### `business_span(name: 'str', **attributes: 'Any') -> 'Iterator[Any]'`
|
|
362
366
|
|
|
363
367
|
A domain/business span on the AMBIENT tracer (never a new provider). No-op when OTel is absent.
|
|
@@ -494,7 +498,7 @@ Resolve a capability name to its invoke factory via the manifest `impl_ref`. Rai
|
|
|
494
498
|
|
|
495
499
|
### `workspace_embedder(ws: 'WorkspaceHandle') -> 'Any'`
|
|
496
500
|
|
|
497
|
-
PS-38 (G22): the workspace's query embedder, built from its `EngineConfig.embeddings` profile on first use, so a pack capability embeds its queries with the model the corpus was indexed with. None when no embedder backend is available (the caller reports it).
|
|
501
|
+
PS-38 (G22): the workspace's query embedder, built from its `EngineConfig.embeddings` profile on first use, so a pack capability embeds its queries with the model the corpus was indexed with. None when no embedder backend is available (the caller reports it). Thread-safe, as `WorkspaceHandle.embedder` (PS-52).
|
|
498
502
|
|
|
499
503
|
### `load_kg_schema(path: 'str') -> 'tuple[tuple[KgVertexType, ...], frozenset[str]]'`
|
|
500
504
|
|
|
@@ -294,7 +294,8 @@ Prefer config; use env for secrets and for non-API callers. The common ones the
|
|
|
294
294
|
| `RAG_MODEL_DEADLINE_S` | total wall-clock limit for one model call across its retries (default: follows `RAG_STRUCTURED_TIMEOUT_S`, never under 180 s) |
|
|
295
295
|
| `RAG_SPACY_MODEL` | the spaCy model name for the optional NER extra |
|
|
296
296
|
| `RAG_MODELS_DIR` | the models root every trained classifier loads its weights from (default: the engine checkout's `data/models` when it exists, else `./data/models`); fill it with `scripts/fetch_reference_models.py` for the reference pack |
|
|
297
|
-
| `EMBED_DEVICE` / `
|
|
297
|
+
| `EMBED_DEVICE` / `DOCLING_DEVICE` / `RAG_SETFIT_DEVICE` | where the local models run. Unset: CUDA when present; on Apple Silicon the BGE embedder and reranker (`EMBED_DEVICE`) run on Metal under one process lock and Docling and the classifiers on CPU, because Metal is not safe for concurrent use (PS-55, `docs/workspaces.md`). An explicit value, `mps` included, always wins |
|
|
298
|
+
| `RAG_SETFIT_CLAUSE_DIR` / `RAG_SETFIT_THRESHOLD` / `RAG_SETFIT_TOPK` | classifier fleet knobs (`RAG_SETFIT_CLAUSE_DIR` overrides `<models root>/setfit_clause`) |
|
|
298
299
|
| `LANGFUSE_PUBLIC_KEY` / `LANGFUSE_SECRET_KEY` / `LANGFUSE_HOST` / `RAG_TRACE_LEVEL` | observability (Langfuse tracing; see [`OBSERVABILITY.md`](OBSERVABILITY.md)) |
|
|
299
300
|
| `RAG_EVAL_BACKEND` | `local` (default) or `langfuse`: where `arun_eval` runs when its `langfuse` argument is not given. `langfuse` needs the Langfuse keys and a gold set with `local_only=False`; a `local_only` gold set is refused before anything is sent |
|
|
300
301
|
|
|
@@ -122,3 +122,10 @@ in two at the PS-6 gate so the store rewrite is its own visible task. One task,
|
|
|
122
122
|
| PS-47 | The audit for PS-46: a parse cached before the fix keeps a blank page's invented text (the cache is keyed on content). `find_blank_pages_with_text(cache_dir, sources=(), *, progress)` and `BlankPageText` on `rag_wright.api` list every page blank in the source PDF (no ink, no text layer) with text in its cached parse, and the cache files to delete before re-ingesting. Searches the cache recursively (`aingest` keeps parses in `parsed/`); embedded files are audited from the cache's own copies; top-level sources are passed as paths or `(name, bytes)` | hermetic tests; a live `build_ingestion` of a workbook embedding a blank-tail PDF: clean, then a planted page found with nothing passed, then clean after delete and re-ingest | done 2026-10-15 |
|
|
123
123
|
| PS-49 | TexWright's request (`docs/engine-requests/2026-10-17-concurrent-modification-printed-during-a-clean-ingest.md`, their repo): a clean keeper ingest printed `ArcadeDB Error Response ... ConcurrentModificationException` lines that read as failures. The retry is the engine's (`_retry_on_conflict`, every store write, since ING-5); the line is the client library's own ERROR log, printed before it raises. A log filter drops that line while the retry handles the call; the retry logs INFO `retried N times; the write landed`, or ERROR `gave up after 10 attempts` and raises | three hermetic tests (red before, green after); live 8-thread concurrent writes: 240/240 landed, 130 error lines before the fix, 0 after (62 INFO retried lines) | done 2026-10-17 |
|
|
124
124
|
| PS-50 | TexWright's request (`docs/engine-requests/2026-10-28-ensure_pack_schema-does-not-declare-a-new-property-on-an-existing-type.md`, their repo): `ensure_pack_schema` declared a type's properties only when it created the type. It now creates every declared property the type lacks, on existing types too; a property whose declared type differs is logged and left as it is; a property the pack dropped stays; a non-STRING property declared over values stored before it is logged (they are not converted; a re-ingest rewrites them, and a value that does not convert fails its write) | a live test (red before, green after: added, mismatch reported, nothing dropped, the unconverted-values warning, a second run issues no DDL); live probe of a re-ingest over the new DOUBLE | done 2026-10-28 |
|
|
125
|
+
| PS-51 | RuleWright's request (`docs/engine-requests/2026-10-28-the-frontend-skill-never-says-what-the-shell-looks-like.md`, their repo; TexWright shipped a top bar, no rail, no detail region, no current-surface state): `building-a-product-frontend` gains Decision 2, the shell's regions (`rail | main detail` over a reserved run row, entailed by the six things; a horizontal bar cannot grow; four columns do not fit at 1440px), the registry's real fields (`nav: { label, end }`, no `icon`), `aria-current` and more than colour with its test, the shell before the surfaces in the build order, two checklist items, and a shipped scaffold (`scaffold/surfaces.tsx`, `ShellLayout.tsx`, `ShellLayout.test.tsx`) | scaffold: strict `tsc`, 7/7 jsdom tests, the `end` and `aria-current` guards proved by planting; a production build measured in Chromium at 1440x900 (rail 256px, detail beside main, 44px links); `test_shipped_skills.py` checks the scaffold is named and ships in wheel + sdist | done 2026-10-28 |
|
|
126
|
+
| PS-52 | TexWright's request (`docs/engine-requests/2026-10-24-workspace-embedder-is-not-thread-safe.md`, their repo): `WorkspaceHandle._embedder` was an unguarded check-then-set, so threads arriving at first use each built a model (`arun_eval(concurrency=4)`: four loads, then a SIGSEGV; each `BGEM3Embedder` locks only itself). A per-handle lock with a double check builds one; `ws.embedder`, `workspace_embedder` and `span_search` say the embedder may be called from several threads | a hermetic 8-thread first-use test (8 builds before, 1 after); live BGE-M3, 4 threads x 3 runs: 4 models in 12-18s before, 1 model in ~6s after; API reference regenerated | done 2026-10-28 |
|
|
127
|
+
| PS-53 | TexWright's request (`docs/engine-requests/2026-10-21-identifiers-in-kg-queries-are-interpolated-unescaped.md`, their repo): KG calls escaped VALUES but interpolated NAMES raw (`where={"1=1 OR id": NOT_NULL}` returned every row). Every name a KG call puts into SQL is now checked first (types; `where` / `key_range` / `set` / `fields` / `distinct` fields; `order_by` terms; `kg_edges` select aliases and expressions; `KgNode` / `KgEdge` properties, key fields and types): an identifier, `@rid`/`@type`/`@in`/`@out` where read, `field [ASC|DESC]`, or a field on `c.`/`e.`/`v.`/`inV().`/`outV().`; else `ValueError`, nothing sent. Unknown fields still match nothing (undeclared properties are supported, the engine's own types carry them); the API docstrings say so | 29 hermetic cases (28 fail before); TexWright's payloads refused live; full hermetic (2327) and live store (67) suites green | done 2026-10-28 |
|
|
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
|
+
| 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
|
+
| 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-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) |
|