linkedparticles-core 1.151.18__tar.gz → 1.187.2__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.
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/PKG-INFO +4 -4
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/README.md +3 -3
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/conformance/README.md +6 -3
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/conformance/profile.yaml +73 -1
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/particle.schema.json +1 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/shacl/ParticleShape.ttl +2 -2
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/trust_lens.schema.json +63 -4
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/constraints.txt +173 -133
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/config.py +1015 -62
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/profile.py +1 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/runner.py +2 -1
- linkedparticles_core-1.187.2/particles/core/closure_measure.py +176 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/conflict_resolution.py +253 -35
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/conflict_review.py +115 -4
- linkedparticles_core-1.187.2/particles/core/consolidation_cadence.py +99 -0
- linkedparticles_core-1.187.2/particles/core/contradiction_disclosure.py +627 -0
- linkedparticles_core-1.187.2/particles/core/generics.py +337 -0
- linkedparticles_core-1.187.2/particles/core/held_release.py +166 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/jsonld_context.py +5 -0
- linkedparticles_core-1.187.2/particles/core/modality.py +265 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/observer_scope.py +16 -0
- linkedparticles_core-1.187.2/particles/core/past_value.py +46 -0
- linkedparticles_core-1.187.2/particles/core/predicate_profile.py +218 -0
- linkedparticles_core-1.187.2/particles/core/probe_verdict.py +130 -0
- linkedparticles_core-1.187.2/particles/core/progress.py +40 -0
- linkedparticles_core-1.187.2/particles/core/reanchor.py +357 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/schema.py +382 -8
- linkedparticles_core-1.187.2/particles/core/spend_budget.py +52 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/status.py +4 -0
- linkedparticles_core-1.187.2/particles/core/vocabulary.py +811 -0
- linkedparticles_core-1.187.2/particles/core/vocabulary_jsonld.py +305 -0
- linkedparticles_core-1.187.2/particles/core/vocabulary_report.py +294 -0
- linkedparticles_core-1.187.2/particles/egress.py +341 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/embeddings.py +32 -3
- linkedparticles_core-1.187.2/particles/extraction/agent.py +457 -0
- linkedparticles_core-1.187.2/particles/extraction/append_delta.py +209 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/calibration.py +272 -4
- linkedparticles_core-1.187.2/particles/extraction/components.py +252 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/general.py +1054 -137
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/incremental.py +151 -40
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/journal.py +93 -3
- linkedparticles_core-1.187.2/particles/extraction/modality.py +159 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/registry.py +9 -0
- linkedparticles_core-1.187.2/particles/extraction/session_state.py +144 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/structure.py +5 -1
- linkedparticles_core-1.187.2/particles/extraction/subject_gate.py +302 -0
- linkedparticles_core-1.187.2/particles/extraction/vocabulary.py +104 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/wikidata.py +78 -31
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/http.py +56 -1
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/interchange/codec.py +5 -2
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/__init__.py +31 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/adapters/anthropic.py +378 -50
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/adapters/openai_compat.py +71 -8
- linkedparticles_core-1.187.2/particles/llm/batch_budget.py +193 -0
- linkedparticles_core-1.187.2/particles/llm/breaker.py +315 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/client.py +10 -1
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/errors.py +21 -0
- linkedparticles_core-1.187.2/particles/llm/logprobs.py +180 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/pool.py +65 -21
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/registry.py +250 -18
- linkedparticles_core-1.187.2/particles/llm/replay.py +584 -0
- linkedparticles_core-1.187.2/particles/llm/spend_budget.py +106 -0
- linkedparticles_core-1.187.2/particles/llm/usage.py +407 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/render/markdown.py +283 -37
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/secrets.py +11 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/url_safety.py +19 -1
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/pyproject.toml +1 -1
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/_client_fixtures.py +136 -5
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conftest.py +1 -0
- linkedparticles_core-1.187.2/tests/test_calibration_isotonic.py +117 -0
- linkedparticles_core-1.187.2/tests/test_config_sample.py +85 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_conformance_validator.py +4 -0
- linkedparticles_core-1.187.2/tests/test_core_contradiction_disclosure.py +321 -0
- linkedparticles_core-1.187.2/tests/test_core_held_release.py +146 -0
- linkedparticles_core-1.187.2/tests/test_core_vocabulary.py +467 -0
- linkedparticles_core-1.187.2/tests/test_egress_policy.py +198 -0
- linkedparticles_core-1.187.2/tests/test_extraction_agent.py +246 -0
- linkedparticles_core-1.187.2/tests/test_llm_batch_budget.py +548 -0
- linkedparticles_core-1.187.2/tests/test_llm_logprobs.py +192 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_llm_pool.py +76 -2
- linkedparticles_core-1.187.2/tests/test_llm_replay.py +423 -0
- linkedparticles_core-1.187.2/tests/test_llm_usage.py +309 -0
- linkedparticles_core-1.151.18/particles/extraction/subject_gate.py +0 -146
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/LICENSE +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/NOTICE +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/conformance/similarity_vectors.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/context.jsonld +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/interchange.schema.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/shacl/CorpusSnapshotShape.ttl +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/shacl/ProvenanceChainShape.ttl +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/shacl/SubjectShape.ttl +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/schemas/shacl/TrustStatementShape.ttl +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/_resources.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/contract.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/fixtures.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/jsonschema.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/shacl.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/types.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/conformance/validator.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/_resources.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/cascade_gate.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/claims.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/duplicate_key.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/equivalence.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/fingerprint.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/granularity.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/provenance.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/scoring/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/scoring/confidence.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/scoring/decay.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/scoring/relevance.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/scoring/utility.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/core/stance.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/docstrings.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/github/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/github/_shared.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/github/gist.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/github/pages.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/github/repo.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/hackernews.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/mastodon.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/mcp_memory.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/migration_preview.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/nomisma.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/numista/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/numista/_shared.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/numista/coin.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/numista/issuer.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/numista/listing.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/polarity.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/property_keys.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/rdf.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/reddit.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/scope.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/subject_scope.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/taxonomy.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/tool_turns.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/extraction/trust_lens.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/interchange/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/interchange/jsonl.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/interchange/yaml_ld.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/adapters/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/adapters/local.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/llm/fencing.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/py.typed +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/render/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/particles/url_canonical.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/__init__.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/_upstream.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/MANIFEST.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/hackernews-thread-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/hackernews-thread-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/hackernews-thread-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/journal-entry-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/journal-entry-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/journal-entry-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mastodon-thread-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mastodon-thread-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mastodon-thread-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mcp-memory-export-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mcp-memory-export-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/mcp-memory-export-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/nomisma-concept-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/nomisma-concept-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/nomisma-concept-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-coin-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-coin-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-coin-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-issuer-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-issuer-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-issuer-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-listing-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-listing-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/numista-listing-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/rdf-graph-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/rdf-graph-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/rdf-graph-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/reddit-thread-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/reddit-thread-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/reddit-thread-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/taxonomy-coins-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/taxonomy-coins-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/taxonomy-coins-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/trust-lens-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/trust-lens-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/trust-lens-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-002/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-002/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-article-002/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-essay-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-essay-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-essay-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-interview-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-interview-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/web-interview-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/wikidata-entity-001/content.bin +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/wikidata-entity-001/manifest.yaml +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/conformance/fixtures/wikidata-entity-001/snapshot.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/fixtures/scope/normative-rule-file.md +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/fixtures/scope/normative-rule-file.recorded.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/fixtures/scope/rule-file-agents-md.md +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/fixtures/scope/rule-file-agents-md.recorded.json +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_confidence.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_config_client_sections.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_conformance_fixture_gen.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_conformance_similarity_vectors.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_core_observer_scope.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_core_provenance.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_embeddings.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_extraction_vision.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_interchange_schema.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_schema.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_secrets.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_url_canonical.py +0 -0
- {linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/tests/test_validity_extraction.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: linkedparticles-core
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.187.2
|
|
4
4
|
Summary: Store-free client library for Particles: define, validate, serialize, and extract provenance-tracked belief particles
|
|
5
5
|
Project-URL: Homepage, https://linkedparticles.org
|
|
6
6
|
Project-URL: Documentation, https://docs.linkedparticles.org
|
|
@@ -103,9 +103,9 @@ p = Particle(
|
|
|
103
103
|
asserted_by="iau-2006",
|
|
104
104
|
)
|
|
105
105
|
|
|
106
|
-
validate_particle_dict(p.model_dump(mode="json"))
|
|
107
|
-
unit = to_unit(p, [])
|
|
108
|
-
from_unit(unit)
|
|
106
|
+
validate_particle_dict(p.model_dump(mode="json")) # []: valid against the normative JSON Schema
|
|
107
|
+
unit = to_unit(p, []) # JSON-LD interchange unit
|
|
108
|
+
from_unit(unit) # …and back again
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
```json
|
|
@@ -51,9 +51,9 @@ p = Particle(
|
|
|
51
51
|
asserted_by="iau-2006",
|
|
52
52
|
)
|
|
53
53
|
|
|
54
|
-
validate_particle_dict(p.model_dump(mode="json"))
|
|
55
|
-
unit = to_unit(p, [])
|
|
56
|
-
from_unit(unit)
|
|
54
|
+
validate_particle_dict(p.model_dump(mode="json")) # []: valid against the normative JSON Schema
|
|
55
|
+
unit = to_unit(p, []) # JSON-LD interchange unit
|
|
56
|
+
from_unit(unit) # …and back again
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
```json
|
{linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/conformance/README.md
RENAMED
|
@@ -65,11 +65,14 @@ its own types from them.
|
|
|
65
65
|
`assertion_modality` (the §1.7 truth-apt gate; truth-apt iff `FALSIFIABLE`)
|
|
66
66
|
and `uncertainty_nature` (the §1 `ALEATORY` exclusion) — plus the
|
|
67
67
|
caller-resolved inputs (the replacement signal, the two supersession
|
|
68
|
-
directions, both trust scores, the differential threshold,
|
|
69
|
-
store has a single trust order
|
|
68
|
+
directions, both trust scores, the differential threshold, whether the
|
|
69
|
+
store has a single trust order, and the rung 2.5 `update_order`). Omitted
|
|
70
|
+
keys take the documented defaults.
|
|
70
71
|
Because the family is about *ordering*, the vectors deliberately set up rungs
|
|
71
72
|
to compete: an `ALEATORY` pair with both a supersession edge and a decisive
|
|
72
|
-
trust gap must still come out `INCONSISTENT`.
|
|
73
|
+
trust gap must still come out `INCONSISTENT`. Rung 2.5 reads `ALEATORY` on
|
|
74
|
+
the newer claim only, the side the sign of `update_order` names:
|
|
75
|
+
the `cl-17` vectors pin all four arrangements.
|
|
73
76
|
- `context_fingerprint` carries `(id, status)` rows rather than a bare id list,
|
|
74
77
|
so all three steps are pinned: the ACTIVE-only filter (step 1), the
|
|
75
78
|
lexicographic sort (step 2 — one vector supplies its ids out of order), and
|
{linkedparticles_core-1.151.18 → linkedparticles_core-1.187.2}/artifacts/conformance/profile.yaml
RENAMED
|
@@ -453,11 +453,41 @@ test_vectors:
|
|
|
453
453
|
trust_score_new: 0.20
|
|
454
454
|
update_order: 1
|
|
455
455
|
expected: SUPERSEDED_BY_EXISTING
|
|
456
|
-
#
|
|
456
|
+
# a settled report retires an earlier aleatory claim: rung 2.5
|
|
457
|
+
# reads ALEATORY on the newer claim only. Rungs 1.5 and 2 pick between
|
|
458
|
+
# sources and keep the exclusion on either side; a same-lineage update
|
|
459
|
+
# whose newer claim states the matter as settled is how aleatory
|
|
460
|
+
# uncertainty is resolved.
|
|
457
461
|
- id: cl-17
|
|
458
462
|
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
459
463
|
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
460
464
|
update_order: 1
|
|
465
|
+
expected: UPDATE_SUPERSEDES
|
|
466
|
+
# a newer ALEATORY claim (a forecast) never retires a settled one.
|
|
467
|
+
- id: cl-17b
|
|
468
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
469
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
470
|
+
update_order: 1
|
|
471
|
+
expected: INCONSISTENT
|
|
472
|
+
# two ALEATORY claims (a revised forecast, or a BOTH_VALID pair): nothing
|
|
473
|
+
# has been settled, so neither retires the other.
|
|
474
|
+
- id: cl-17c
|
|
475
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
476
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
477
|
+
update_order: 1
|
|
478
|
+
expected: INCONSISTENT
|
|
479
|
+
# "newer" follows the sign of update_order: an out-of-order ALEATORY new
|
|
480
|
+
# claim is the older one, and the settled existing claim retires it.
|
|
481
|
+
- id: cl-17d
|
|
482
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
483
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
484
|
+
update_order: -1
|
|
485
|
+
expected: UPDATE_SUPERSEDED_BY_EXISTING
|
|
486
|
+
# the -1 mirror of cl-17b: the newer side is the ALEATORY existing claim.
|
|
487
|
+
- id: cl-17e
|
|
488
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
489
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
490
|
+
update_order: -1
|
|
461
491
|
expected: INCONSISTENT
|
|
462
492
|
# the probe outranks 2.5: no contradiction, no supersession.
|
|
463
493
|
- id: cl-18
|
|
@@ -472,6 +502,48 @@ test_vectors:
|
|
|
472
502
|
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
473
503
|
update_order: 1
|
|
474
504
|
expected: CORROBORATES
|
|
505
|
+
# rung 2.5 rests on the same-slot check: with no contradiction
|
|
506
|
+
# signal, a settled same-slot update still resolves to the newer claim.
|
|
507
|
+
# Two claims giving one slot successive values can both be true at their
|
|
508
|
+
# own times, so the contradiction probe is not the test of an update.
|
|
509
|
+
- id: cl-20
|
|
510
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
511
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
512
|
+
has_contradiction_signal: false
|
|
513
|
+
update_order: 1
|
|
514
|
+
same_slot_update: true
|
|
515
|
+
expected: UPDATE_SUPERSEDES
|
|
516
|
+
# its mirror: an out-of-order (older) new claim is the one retired.
|
|
517
|
+
- id: cl-21
|
|
518
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
519
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
520
|
+
has_contradiction_signal: false
|
|
521
|
+
update_order: -1
|
|
522
|
+
same_slot_update: true
|
|
523
|
+
expected: UPDATE_SUPERSEDED_BY_EXISTING
|
|
524
|
+
# the ALEATORY condition reads the newer claim, as at rung 2.5.
|
|
525
|
+
- id: cl-22
|
|
526
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
527
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: ALEATORY }
|
|
528
|
+
has_contradiction_signal: false
|
|
529
|
+
update_order: 1
|
|
530
|
+
same_slot_update: true
|
|
531
|
+
expected: CORROBORATES
|
|
532
|
+
# the truth-apt gate outranks the update answer too.
|
|
533
|
+
- id: cl-23
|
|
534
|
+
existing: { assertion_modality: EVALUATIVE, uncertainty_nature: EPISTEMIC }
|
|
535
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
536
|
+
has_contradiction_signal: false
|
|
537
|
+
update_order: 1
|
|
538
|
+
same_slot_update: true
|
|
539
|
+
expected: CORROBORATES
|
|
540
|
+
# no lineage order, no update: the answer alone retires nothing.
|
|
541
|
+
- id: cl-24
|
|
542
|
+
existing: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
543
|
+
new: { assertion_modality: FALSIFIABLE, uncertainty_nature: EPISTEMIC }
|
|
544
|
+
has_contradiction_signal: false
|
|
545
|
+
same_slot_update: true
|
|
546
|
+
expected: CORROBORATES
|
|
475
547
|
|
|
476
548
|
# --- §16.1 context fingerprint -----------------------------------
|
|
477
549
|
# Procedure: (1) take every ACTIVE particle in the store, (2) sort the UUIDs
|
|
@@ -87,8 +87,8 @@ particles:ParticleShape
|
|
|
87
87
|
"LOWER_TRUST_SOURCE" "SUPERSEDED_BY_REINDEX" "VALIDITY_EXPIRED"
|
|
88
88
|
"CONFLICT_RESOLVED" "CONFLICT_PENDING" "EXPLICIT_RETRACTION"
|
|
89
89
|
"SOURCE_RETRACTED" "EXPLICIT_SUPERSESSION" "DOCUMENT_SUPERSEDED"
|
|
90
|
-
"SUPERSEDED_BY_UPDATE" "DUPLICATE_MERGED" ) ;
|
|
91
|
-
sh:message "status_reason, when present, must be one of the
|
|
90
|
+
"SUPERSEDED_BY_UPDATE" "SUPERSEDED_BY_REANCHOR" "DUPLICATE_MERGED" ) ;
|
|
91
|
+
sh:message "status_reason, when present, must be one of the fifteen StatusReason values." ;
|
|
92
92
|
] ;
|
|
93
93
|
|
|
94
94
|
# particleType — optional; CLAIM default, REVIEW for review annotation
|
|
@@ -2,8 +2,19 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://linkedparticles.org/schemas/trust_lens.schema.json",
|
|
4
4
|
"$defs": {
|
|
5
|
+
"AssertionModality": {
|
|
6
|
+
"description": "What *kind* of assertion a particle makes: the default for its adjudicability.\n\nOrthogonal to ``uncertainty_nature`` (which presupposes a fact of the\nmatter) and to scope (which lives in ``properties``). The write\npath arbitrates (the \u00a76.6 conflict ladder, L-SEM-01, L-IDX-01) only pairs\nof ``FALSIFIABLE`` particles (see :func:`is_truth_apt`); the other\nmodalities co-exist and are never contradiction-checked or\ntrust-arbitrated. The value is a regenerable default, not a property of\nthe claim: it is stamped with the classifier that set it, an operator may\ncorrect it, and a lens may read it differently at read time only.\nDefault ``FALSIFIABLE`` keeps every existing particle\nunchanged. Closed enum: adding a modality is an additive minor change.",
|
|
7
|
+
"enum": [
|
|
8
|
+
"FALSIFIABLE",
|
|
9
|
+
"EVALUATIVE",
|
|
10
|
+
"EXPERIENTIAL",
|
|
11
|
+
"CONSTITUTIVE"
|
|
12
|
+
],
|
|
13
|
+
"title": "AssertionModality",
|
|
14
|
+
"type": "string"
|
|
15
|
+
},
|
|
5
16
|
"TrustLensDecayRule": {
|
|
6
|
-
"description": "One portable content-age decay rule carried by a lens.\n\nSets the recency half-life / floor for content matching ``pattern``
|
|
17
|
+
"description": "One portable content-age decay rule carried by a lens.\n\nSets the recency half-life / floor for content matching ``pattern`` \u2014 an\nexact ``source_type`` string (``scope=\"source_type\"``) or a trust-rule-style\nURL regex (``scope=\"url_pattern\"``, e.g. a per-subreddit half-life). Unlike\nthe URL *trust* rule's additive ``modifier``, a decay rule is an **absolute**\n``(half_life_days, floor)`` pair \u2014 half-life is not meaningfully additive.\nThe URL layer is more specific than the source_type layer (a per-subreddit\nrule overrides the source-type default in either direction); across adopted\nlenses the most-skeptical rule wins (shortest half-life / lowest floor).",
|
|
7
18
|
"properties": {
|
|
8
19
|
"scope": {
|
|
9
20
|
"enum": [
|
|
@@ -39,8 +50,49 @@
|
|
|
39
50
|
"title": "TrustLensDecayRule",
|
|
40
51
|
"type": "object"
|
|
41
52
|
},
|
|
53
|
+
"TrustLensModalityRule": {
|
|
54
|
+
"description": "One portable override of the adjudicability default carried by a lens.\n\n``assertion_modality`` is the extraction-time default for whether a claim\nmay be arbitrated against another; a lens may read it differently for its\nobserver. The rule applies to the claims ``scope`` + ``pattern`` select:\n\n- ``particle``: ``pattern`` is a particle id;\n- ``subject``: ``pattern`` is a subject id the claim is about;\n- ``url_pattern``: ``pattern`` is a regex searched in the claim's source\n URIs (the trust-rule regex shape);\n- ``source_type``: ``pattern`` is an exact ``source_type`` string.\n\n``when``, if set, limits the rule to claims whose stored default is that\nmodality. Particle and subject ids are store-local: an interchange import\nmints fresh ids, so such a rule ports only to a faithful restore of its own\nstore, and elsewhere matches nothing, which leaves the stored default.\n\nRead-time only. A rule decides what renders contested and what the lint\nqueue names for the operator; it never reaches a write, ranking, or\n``effective_confidence``, and an operator verdict always wins over it.\nWithin one lens the most specific matching rule decides that lens's\nreading; across adopted lenses abstention (a non-``FALSIFIABLE`` reading)\nwins at any scope, so adopting a lens can only withdraw adjudication.",
|
|
55
|
+
"properties": {
|
|
56
|
+
"scope": {
|
|
57
|
+
"enum": [
|
|
58
|
+
"particle",
|
|
59
|
+
"subject",
|
|
60
|
+
"url_pattern",
|
|
61
|
+
"source_type"
|
|
62
|
+
],
|
|
63
|
+
"title": "Scope",
|
|
64
|
+
"type": "string"
|
|
65
|
+
},
|
|
66
|
+
"pattern": {
|
|
67
|
+
"minLength": 1,
|
|
68
|
+
"title": "Pattern",
|
|
69
|
+
"type": "string"
|
|
70
|
+
},
|
|
71
|
+
"modality": {
|
|
72
|
+
"$ref": "#/$defs/AssertionModality"
|
|
73
|
+
},
|
|
74
|
+
"when": {
|
|
75
|
+
"anyOf": [
|
|
76
|
+
{
|
|
77
|
+
"$ref": "#/$defs/AssertionModality"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"type": "null"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"default": null
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"required": [
|
|
87
|
+
"scope",
|
|
88
|
+
"pattern",
|
|
89
|
+
"modality"
|
|
90
|
+
],
|
|
91
|
+
"title": "TrustLensModalityRule",
|
|
92
|
+
"type": "object"
|
|
93
|
+
},
|
|
42
94
|
"TrustLensStatement": {
|
|
43
|
-
"description": "One portable SOURCE_TYPE-scoped trust statement carried by a lens.\n\n``CORPUS_ENTRY``-scoped statements are excluded from lenses by design
|
|
95
|
+
"description": "One portable SOURCE_TYPE-scoped trust statement carried by a lens.\n\n``CORPUS_ENTRY``-scoped statements are excluded from lenses by design \u2014\nthey key on store-local entry ids and are not portable.",
|
|
44
96
|
"properties": {
|
|
45
97
|
"domain": {
|
|
46
98
|
"minLength": 1,
|
|
@@ -130,7 +182,7 @@
|
|
|
130
182
|
"type": "object"
|
|
131
183
|
},
|
|
132
184
|
"TrustLensUtilityRule": {
|
|
133
|
-
"description": "One portable usefulness (outcome-learning) utility rule carried by a lens.\n\nWhere a ``decay_rule`` is the *judgment* half of content-age\ndecay, a ``utility_rule`` is the judgment half of **usefulness**: it sets\n*how far* demonstrated use may reorder the projection / digest head, and\n*how fast* unreinforced utility fades. The per-belief utility *evidence*\n(the mined reinforcement count) is store-local and lives outside the lens
|
|
185
|
+
"description": "One portable usefulness (outcome-learning) utility rule carried by a lens.\n\nWhere a ``decay_rule`` is the *judgment* half of content-age\ndecay, a ``utility_rule`` is the judgment half of **usefulness**: it sets\n*how far* demonstrated use may reorder the projection / digest head, and\n*how fast* unreinforced utility fades. The per-belief utility *evidence*\n(the mined reinforcement count) is store-local and lives outside the lens\u2014\nthis rule carries only the tunables.\n\n- ``half_life_uses_days`` \u2014 days for a single utility event's weight to halve\n (the reinforcement half-life; ``> 0``).\n- ``rank_lift`` \u2014 the ``\u03bb`` in ``rank_score = effective_confidence\n + \u03bb\u00b7ln(1 + R)`` (``\u2265 0``; ``0`` disables the lift). **Promotion-only** by\n construction \u2014 the bonus is never negative, so lack of use withholds the\n lift rather than demoting.\n\nThis single knob replaced the old ``weight`` / ``floor`` / ``cap`` triple\nwhen the bounded multiplier was superseded; a lens\npublished under the old vocabulary carries no ``rank_lift`` and is treated\nas silent about utility (the store's local ``utility`` config applies).\n\nAcross adopted lenses the most-skeptical rule wins \u2014 *less* promotion:\nshortest ``half_life_uses_days``, lowest ``rank_lift`` (symmetric with the\ndecay rule). ``scope=\"default\"`` is the\nstore-wide rule; ``source_type`` / ``url_pattern`` scopes mirror the decay\nladder for finer control.",
|
|
134
186
|
"properties": {
|
|
135
187
|
"scope": {
|
|
136
188
|
"default": "default",
|
|
@@ -173,7 +225,7 @@
|
|
|
173
225
|
"type": "object"
|
|
174
226
|
}
|
|
175
227
|
},
|
|
176
|
-
"description": "A depositable corpus artefact bundling portable trust policy.\n\nA community publishes its view of which sources to trust by depositing a\nJSON file; the ``TrustLensExtractor`` materialises it into the\n``trust_lenses`` / ``trust_lens_entries`` tables. Viewers adopt lenses per\nstore; the query-time ``TrustPolicy`` composes the store's local\npolicy over adopted lenses, most-skeptical-wins. Adopting a lens can only\ndemote (ranks are in [0, 1] and silence stays neutral), never promote.\n\nA lens carries a fourth portable layer, ``decay_rules``
|
|
228
|
+
"description": "A depositable corpus artefact bundling portable trust policy.\n\nA community publishes its view of which sources to trust by depositing a\nJSON file; the ``TrustLensExtractor`` materialises it into the\n``trust_lenses`` / ``trust_lens_entries`` tables. Viewers adopt lenses per\nstore; the query-time ``TrustPolicy`` composes the store's local\npolicy over adopted lenses, most-skeptical-wins. Adopting a lens can only\ndemote (ranks are in [0, 1] and silence stays neutral), never promote.\n\nA lens carries a fourth portable layer, ``decay_rules`` \u2014\nper-observer content-age decay (recency half-life / floor), composed through\nthe query-time ``DecayPolicy`` the same most-skeptical-wins way as the trust\nlayers. A lens silent about decay leaves the store's global\n``content_age_decay`` config untouched.\n\nA lens also carries ``utility_rules`` \u2014 the usefulness\n(outcome-learning) judgment, composed through the query-time ``UtilityPolicy``\ninto an additive rank-lift on the projection / digest ranking path\nonly. A lens silent about utility leaves the store's local ``utility`` config\nuntouched; with no utility evidence the bonus is ``+0`` (cold-start).\n\nA lens may also carry ``modality_rules``: a per-observer reading\nof the adjudicability default, applied at read time to the contested badge\nand the lint queue only. A lens silent about modality reads every claim as\nits stored default.",
|
|
177
229
|
"properties": {
|
|
178
230
|
"kind": {
|
|
179
231
|
"const": "TrustLensDefinition",
|
|
@@ -254,6 +306,13 @@
|
|
|
254
306
|
"title": "Utility Rules",
|
|
255
307
|
"type": "array"
|
|
256
308
|
},
|
|
309
|
+
"modality_rules": {
|
|
310
|
+
"items": {
|
|
311
|
+
"$ref": "#/$defs/TrustLensModalityRule"
|
|
312
|
+
},
|
|
313
|
+
"title": "Modality Rules",
|
|
314
|
+
"type": "array"
|
|
315
|
+
},
|
|
257
316
|
"corpus_entry_id": {
|
|
258
317
|
"anyOf": [
|
|
259
318
|
{
|