mostlyright-data 0.31.0__tar.gz → 0.31.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.
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/PKG-INFO +1 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/5-draft-one-recipe-document-one-call.md +1 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/enriching-with-small-models.md +10 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/sources.md +5 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +12 -5
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/enrichment.py +11 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe.py +1 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/table_search_contract.json +29 -2
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/transport.py +128 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4.py +2 -2
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_public.py +17 -1
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_runs.py +5 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_search_contract.py +28 -9
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/.gitignore +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/README.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/pyproject.toml +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/SKILL.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/1-open-the-page-and-the-link-to-it-in-the-first-message.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/2-brief-two-to-four-questions-each-with-a-recommended-answer.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/3-probe-read-a-source-before-committing-to-it.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/4-decide-say-what-you-chose-what-you-refused-and-ask-one-question.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/6-build-one-run-sized-to-acquire-every-measured-source-whole.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/7-interrogate-ask-the-run-what-it-actually-delivered.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/8-fix-revise-the-document-and-register-it-again.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/9-present-only-what-survived-inspection-with-caveats.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/agent-protocol.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/autonomous-delivery.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/before-the-first-tool-call.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/boundaries.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/cloud-authentication-preflight.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/commands.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/cross-repository-protocol-reference.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/installation-parity.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/live-run.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/making-a-table-incremental.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/narrating-the-run.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/not-hosted-yet.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/one-install.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/patterns.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/prediction-labels.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/preparing-table-search.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/promote.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/readers.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/receipts.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/recipe-test.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/recording-a-stream-venue.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/recovering-an-import-failure.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/reference-pages.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/required-protocol.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/source-credentials.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/the-one-thing-to-say-about-the-skill-itself.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/transforms.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/user-communication-contract.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/writing-a-decision-record.md +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/agent_protocol.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/page_coverage.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/backoff.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/categories.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/fast_features.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/matching_benchmark.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/progress_rate.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/progress_vocabulary.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_brief.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_explain.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_forecast.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_lint.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_test.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/refresh_rehearsal.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/release_check.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/run_diagnose.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/run_prefix.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/studio_capabilities.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/support.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_connected.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_matching.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_reader.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_search.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/render.py +0 -0
|
@@ -141,6 +141,7 @@ The allowed IDs and labels are:
|
|
|
141
141
|
| `people-society` | People & Society |
|
|
142
142
|
| `health-medicine` | Health & Medicine |
|
|
143
143
|
| `science-research` | Science & Research |
|
|
144
|
+
| `ai-models` | AI & Models |
|
|
144
145
|
| `technology` | Technology |
|
|
145
146
|
| `energy` | Energy |
|
|
146
147
|
| `agriculture-food` | Agriculture & Food |
|
|
@@ -26,6 +26,16 @@ The person pays nothing for these calls. They count against the workspace's dail
|
|
|
26
26
|
`mr-data recipe forecast` reports. Prefer `classify` over `openrouter-decisions` for new work:
|
|
27
27
|
Mostly Right pays OpenRouter per Jev call, and Clef answers the same request body.
|
|
28
28
|
|
|
29
|
+
Each binding also comes with a `pages_template`: `request_timeout_seconds` 120 and `retries` 3.
|
|
30
|
+
Write both into the collection's `pages`. Clef and the extraction model scale to zero when idle,
|
|
31
|
+
and their first instance takes three to five minutes to load. Studio starts loading it when the
|
|
32
|
+
run is admitted, and until the service has answered once it spreads each member's attempts over
|
|
33
|
+
six minutes rather than seconds. The longer timeout and the fourth attempt let the last one land
|
|
34
|
+
after a slow start. Size `limits.max_requests` at `pages.max_fetches_per_run` times four. A run
|
|
35
|
+
that still fails says `it never answered, likely a 3 to 5 minute cold start` in its
|
|
36
|
+
`ROW_REQUEST_UNAVAILABLE` detail: tell the person the model was starting up and run it again, which keeps every saved
|
|
37
|
+
answer.
|
|
38
|
+
|
|
29
39
|
A task listed `not_served` or `planned` is offered as coming, never written into a recipe. For
|
|
30
40
|
`match`, join on a normalized deterministic key now and say that model matching for the rows the
|
|
31
41
|
key cannot settle is coming.
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/sources.md
RENAMED
|
@@ -291,7 +291,11 @@ The worker retries 408, 429 and every 5xx but 501 and 505. It also retries when
|
|
|
291
291
|
arrived: a transport, resolver or TLS failure, or a response refused before its status was
|
|
292
292
|
checked, such as a compressed body or a malformed header, whatever its status. It sends a request
|
|
293
293
|
at most `pages.retries` more times, then fails the run with `ROW_REQUEST_UNAVAILABLE`. A
|
|
294
|
-
`Retry-After` longer than 60 seconds fails the run at once, and more retries cannot help it.
|
|
294
|
+
`Retry-After` longer than 60 seconds fails the run at once, and more retries cannot help it. A
|
|
295
|
+
platform credential's source that calls this deployment's own model service (Clef, the
|
|
296
|
+
extraction model) waits longer before that service has answered once: a failure
|
|
297
|
+
with no answer, or a 502, 503 or 504 without `Retry-After`, is that service's cold start, and the
|
|
298
|
+
attempts left are spread so the last goes out six minutes after the first. When
|
|
295
299
|
the request presents a key, a checked 401 or 403 stops the source with
|
|
296
300
|
`ROW_REQUEST_CREDENTIAL_REFUSED`, and a checked 402 with `ROW_REQUEST_PAYMENT_REQUIRED`. Any
|
|
297
301
|
other answer the upstream gave fails that one member, and the run goes on. That covers another
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "crypto",
|
|
14
14
|
"label": "Crypto",
|
|
15
15
|
"definition": "Cryptocurrencies, blockchain networks, DeFi and digital-asset markets.",
|
|
16
|
-
"exclusions": "Use Finance for conventional securities, banking and non-crypto
|
|
16
|
+
"exclusions": "Use Finance for conventional securities, banking and other non-crypto financial markets.",
|
|
17
17
|
"examples": "Bitcoin prices; Ethereum transactions; DeFi lending"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"label": "Finance",
|
|
22
22
|
"definition": "Banking, securities, investment, insurance and financial-market activity.",
|
|
23
23
|
"exclusions": "Crypto assets belong to Crypto; economy-wide indicators belong to Economics & Business.",
|
|
24
|
-
"examples": "Stock prices; interest-rate products;
|
|
24
|
+
"examples": "Stock prices; interest-rate products; exchange trade records"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"id": "economics-business",
|
|
@@ -58,12 +58,19 @@
|
|
|
58
58
|
"exclusions": "Use the subject-specific category for weather, health, technology or other covered research.",
|
|
59
59
|
"examples": "Astronomical observations; particle experiments; research publications"
|
|
60
60
|
},
|
|
61
|
+
{
|
|
62
|
+
"id": "ai-models",
|
|
63
|
+
"label": "AI & Models",
|
|
64
|
+
"definition": "AI systems, specialized and frontier models, evaluations, training-run metadata, agent traces and model-related corpora.",
|
|
65
|
+
"exclusions": "General software, internet and telecommunications measurements belong to Technology. A dataset about a non-AI subject stays in that subject even when a model was used to build it.",
|
|
66
|
+
"examples": "Frontier-model benchmark scores; model cards; agent-workflow traces"
|
|
67
|
+
},
|
|
61
68
|
{
|
|
62
69
|
"id": "technology",
|
|
63
70
|
"label": "Technology",
|
|
64
|
-
"definition": "Software, computing,
|
|
65
|
-
"exclusions": "Blockchain belongs to Crypto; media consumption and gaming belong to Arts, Media & Entertainment.",
|
|
66
|
-
"examples": "Software packages; internet performance;
|
|
71
|
+
"definition": "Software, computing, internet and telecommunications.",
|
|
72
|
+
"exclusions": "AI systems, models, evaluations and agent traces belong to AI & Models. Blockchain belongs to Crypto; media consumption and gaming belong to Arts, Media & Entertainment.",
|
|
73
|
+
"examples": "Software packages; internet performance; package registries"
|
|
67
74
|
},
|
|
68
75
|
{
|
|
69
76
|
"id": "energy",
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/enrichment.py
RENAMED
|
@@ -135,6 +135,13 @@ def binding_task(entry: Mapping[str, Any]) -> str:
|
|
|
135
135
|
return "other"
|
|
136
136
|
|
|
137
137
|
|
|
138
|
+
#: The ``pages`` members a model source states. A self-hosted model scales to zero and its first
|
|
139
|
+
#: instance loads for three to five minutes; Studio waits out that cold start between a member's
|
|
140
|
+
#: attempts, and a longer request timeout and a fourth attempt let the last one land after it.
|
|
141
|
+
#: ``limits.max_requests`` must then cover ``pages.max_fetches_per_run`` times four.
|
|
142
|
+
MODEL_PAGES_TEMPLATE: Mapping[str, int] = {"request_timeout_seconds": 120, "retries": 3}
|
|
143
|
+
|
|
144
|
+
|
|
138
145
|
def request_template(task: str, entry: Mapping[str, Any]) -> dict[str, Any] | None:
|
|
139
146
|
"""A per-row ``request`` to start from, with this deployment's route and pin filled in."""
|
|
140
147
|
|
|
@@ -199,6 +206,8 @@ def models_listing(listing: Mapping[str, Any] | None) -> dict[str, Any]:
|
|
|
199
206
|
else:
|
|
200
207
|
row["for_recipes"] = True
|
|
201
208
|
row["request_template"] = request_template(name, entry)
|
|
209
|
+
if row["request_template"] is not None:
|
|
210
|
+
row["pages_template"] = dict(MODEL_PAGES_TEMPLATE)
|
|
202
211
|
served.append(row)
|
|
203
212
|
order = TASK_BINDINGS[name]
|
|
204
213
|
served.sort(
|
|
@@ -656,7 +665,8 @@ def models(args: argparse.Namespace, *, client: Any | None = None) -> dict[str,
|
|
|
656
665
|
"reference": REFERENCE,
|
|
657
666
|
"next_step": (
|
|
658
667
|
"Write an available binding's request_template into a per-row source, keeping "
|
|
659
|
-
"origin, method, path and model exactly as listed
|
|
668
|
+
"origin, method, path and model exactly as listed, and its pages_template into "
|
|
669
|
+
"the collection's pages. Run mr-data models suggest "
|
|
660
670
|
"RUN_ID after a run to see where the table could use one."
|
|
661
671
|
),
|
|
662
672
|
}
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe.py
RENAMED
|
@@ -169,7 +169,7 @@ FILE_DECODER_COORDINATES: frozenset[tuple[str, str]] = frozenset(
|
|
|
169
169
|
(family, version)
|
|
170
170
|
for family, versions in {
|
|
171
171
|
"archive.gzip": ("1.0.0", "1.1.0", "2.0.0"),
|
|
172
|
-
"archive.tar": ("1.0.0", "1.1.0", "3.0.0"),
|
|
172
|
+
"archive.tar": ("1.0.0", "1.1.0", "3.0.0", "4.0.0"),
|
|
173
173
|
"archive.zip": ("1.0.0", "1.1.0", "1.2.0", "1.3.0", "1.4.0", "1.5.0", "3.0.0"),
|
|
174
174
|
"delimited_text": ("1.0.0", "1.1.0", "2.0.0"),
|
|
175
175
|
"geoparquet.vector": ("1.0.0",),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "mostlyright-thin-table-search-contract.v1",
|
|
3
|
-
"source_commit": "
|
|
4
|
-
"recipe_search_definition": "
|
|
3
|
+
"source_commit": "27b7e13f5d15471c6386f8797586c1cf332dd6a1",
|
|
4
|
+
"recipe_search_definition": "recipe_search",
|
|
5
5
|
"$defs": {
|
|
6
6
|
"evaluation_case": {
|
|
7
7
|
"type": "object",
|
|
@@ -107,6 +107,21 @@
|
|
|
107
107
|
"cases"
|
|
108
108
|
]
|
|
109
109
|
},
|
|
110
|
+
"recipe_search": {
|
|
111
|
+
"allOf": [
|
|
112
|
+
{
|
|
113
|
+
"$ref": "#/$defs/spec"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"not": {
|
|
117
|
+
"required": [
|
|
118
|
+
"long_text_columns"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"description": "Keel's recipe reader does not admit long_text_columns yet (4.42.0): a search revision declares it."
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
110
125
|
"spec": {
|
|
111
126
|
"type": "object",
|
|
112
127
|
"additionalProperties": false,
|
|
@@ -418,6 +433,18 @@
|
|
|
418
433
|
"minLength": 1,
|
|
419
434
|
"maxLength": 128
|
|
420
435
|
}
|
|
436
|
+
},
|
|
437
|
+
"long_text_columns": {
|
|
438
|
+
"description": "Long string columns (4.42.0) whose text is searched by meaning, Mojirama's subtitles: plot synopses, descriptions, dialogue. Each row's text is cut into chunks, embedded and averaged into one vector per row in the package's `media.long_text`, and a plan's `long_text` ranks with it. Declared columns of type string; a public table only (Studio declares no media for another). Admitted on a search revision; a recipe's `table.search` may not name it yet.",
|
|
439
|
+
"type": "array",
|
|
440
|
+
"minItems": 1,
|
|
441
|
+
"maxItems": 4,
|
|
442
|
+
"uniqueItems": true,
|
|
443
|
+
"items": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"minLength": 1,
|
|
446
|
+
"maxLength": 128
|
|
447
|
+
}
|
|
421
448
|
}
|
|
422
449
|
},
|
|
423
450
|
"required": [
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/transport.py
RENAMED
|
@@ -10,8 +10,12 @@ to relax any of it.
|
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
+
import http.client
|
|
13
14
|
import ipaddress
|
|
15
|
+
import math
|
|
14
16
|
import ssl
|
|
17
|
+
import threading
|
|
18
|
+
import time
|
|
15
19
|
from collections.abc import Callable, Iterator, Mapping
|
|
16
20
|
from contextlib import contextmanager
|
|
17
21
|
from typing import Any, Protocol
|
|
@@ -119,8 +123,9 @@ class UrlLibTransport:
|
|
|
119
123
|
|
|
120
124
|
def __init__(self, *, timeout: float | Callable[[], float] = REQUEST_TIMEOUT_SECONDS) -> None:
|
|
121
125
|
self._timeout = timeout if callable(timeout) else float(timeout)
|
|
126
|
+
self._context = ssl.create_default_context()
|
|
122
127
|
self._opener = build_opener(
|
|
123
|
-
ProxyHandler({}), HTTPSHandler(context=
|
|
128
|
+
ProxyHandler({}), HTTPSHandler(context=self._context), _NoRedirect()
|
|
124
129
|
)
|
|
125
130
|
|
|
126
131
|
def _clock(self) -> float:
|
|
@@ -171,6 +176,128 @@ class UrlLibTransport:
|
|
|
171
176
|
response.close()
|
|
172
177
|
|
|
173
178
|
|
|
179
|
+
class ReusableHttpsTransport(UrlLibTransport):
|
|
180
|
+
"""One serialized, verified HTTPS connection for repeated query requests.
|
|
181
|
+
|
|
182
|
+
urllib deliberately sends Connection: close. A query client reuses its
|
|
183
|
+
own connection instead, never a global credential-bearing pool. Changing
|
|
184
|
+
origin closes the old socket. Responses are bounded and fully framed;
|
|
185
|
+
any failure discards the socket and is raised without replaying a POST.
|
|
186
|
+
Streams retain the original urllib/proxy-free/redirect-free behavior.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
def __init__(self, *, timeout: float | Callable[[], float] = REQUEST_TIMEOUT_SECONDS) -> None:
|
|
190
|
+
super().__init__(timeout=timeout)
|
|
191
|
+
self._lock = threading.Lock()
|
|
192
|
+
self._connection: http.client.HTTPSConnection | None = None
|
|
193
|
+
self._connection_origin: tuple[str, str, int] | None = None
|
|
194
|
+
|
|
195
|
+
def _discard(self) -> None:
|
|
196
|
+
connection, self._connection = self._connection, None
|
|
197
|
+
self._connection_origin = None
|
|
198
|
+
if connection is not None:
|
|
199
|
+
connection.close()
|
|
200
|
+
|
|
201
|
+
def close(self) -> None:
|
|
202
|
+
with self._lock:
|
|
203
|
+
self._discard()
|
|
204
|
+
|
|
205
|
+
def __enter__(self) -> ReusableHttpsTransport:
|
|
206
|
+
return self
|
|
207
|
+
|
|
208
|
+
def __exit__(self, *_args: Any) -> None:
|
|
209
|
+
self.close()
|
|
210
|
+
|
|
211
|
+
def __del__(self) -> None:
|
|
212
|
+
connection = getattr(self, "_connection", None)
|
|
213
|
+
if connection is not None:
|
|
214
|
+
connection.close()
|
|
215
|
+
|
|
216
|
+
def request(
|
|
217
|
+
self, method: str, url: str, headers: Mapping[str, str], body: bytes | None, maximum: int
|
|
218
|
+
) -> tuple[int, bytes, Mapping[str, str]]:
|
|
219
|
+
if type(maximum) is not int or maximum < 0:
|
|
220
|
+
raise ThinLaneError("THIN_REQUEST_INVALID", "the response ceiling must be nonnegative")
|
|
221
|
+
parts = urlsplit(url)
|
|
222
|
+
service_origin(
|
|
223
|
+
f"{parts.scheme}://{parts.netloc}", "request origin", allow_loopback_http=False
|
|
224
|
+
)
|
|
225
|
+
if parts.scheme != "https" or parts.fragment or parts.hostname is None:
|
|
226
|
+
raise ThinLaneError(
|
|
227
|
+
"THIN_REQUEST_INVALID", "a reusable request requires a valid HTTPS URL"
|
|
228
|
+
)
|
|
229
|
+
origin = (parts.scheme, parts.hostname.lower(), parts.port or 443)
|
|
230
|
+
if any(
|
|
231
|
+
name.lower() == "host" and value.lower() != parts.netloc.lower()
|
|
232
|
+
for name, value in headers.items()
|
|
233
|
+
):
|
|
234
|
+
raise ThinLaneError(
|
|
235
|
+
"THIN_REQUEST_INVALID", "the Host header differs from the request origin"
|
|
236
|
+
)
|
|
237
|
+
budget = self._clock()
|
|
238
|
+
if not math.isfinite(budget) or budget <= 0:
|
|
239
|
+
raise TimeoutError("the request deadline has elapsed")
|
|
240
|
+
deadline = time.monotonic() + budget
|
|
241
|
+
if not self._lock.acquire(timeout=budget):
|
|
242
|
+
raise TimeoutError("the request deadline elapsed waiting for its connection")
|
|
243
|
+
|
|
244
|
+
def remaining() -> float:
|
|
245
|
+
value = deadline - time.monotonic()
|
|
246
|
+
if value <= 0:
|
|
247
|
+
raise TimeoutError("the request deadline has elapsed")
|
|
248
|
+
return value
|
|
249
|
+
|
|
250
|
+
try:
|
|
251
|
+
if self._connection_origin != origin:
|
|
252
|
+
self._discard()
|
|
253
|
+
if self._connection is None:
|
|
254
|
+
self._connection = http.client.HTTPSConnection(
|
|
255
|
+
origin[1], origin[2], timeout=remaining(), context=self._context
|
|
256
|
+
)
|
|
257
|
+
self._connection_origin = origin
|
|
258
|
+
connection = self._connection
|
|
259
|
+
connection.timeout = remaining()
|
|
260
|
+
if connection.sock is not None:
|
|
261
|
+
connection.sock.settimeout(remaining())
|
|
262
|
+
path = parts.path or "/"
|
|
263
|
+
if parts.query:
|
|
264
|
+
path += "?" + parts.query
|
|
265
|
+
connection.request(method, path, body=body, headers=dict(with_user_agent(headers)))
|
|
266
|
+
if connection.sock is not None:
|
|
267
|
+
connection.sock.settimeout(remaining())
|
|
268
|
+
response = connection.getresponse()
|
|
269
|
+
expected = response.length
|
|
270
|
+
chunks: list[bytes] = []
|
|
271
|
+
length = 0
|
|
272
|
+
while length <= maximum:
|
|
273
|
+
if connection.sock is not None:
|
|
274
|
+
connection.sock.settimeout(remaining())
|
|
275
|
+
chunk = response.read1(min(64 * 1024, maximum + 1 - length))
|
|
276
|
+
if not chunk:
|
|
277
|
+
break
|
|
278
|
+
chunks.append(chunk)
|
|
279
|
+
length += len(chunk)
|
|
280
|
+
raw = b"".join(chunks)
|
|
281
|
+
if length > maximum:
|
|
282
|
+
raise ThinLaneError(
|
|
283
|
+
"THIN_RESPONSE_TOO_LARGE",
|
|
284
|
+
"the response exceeded the byte ceiling for its route",
|
|
285
|
+
)
|
|
286
|
+
if expected is not None and length != expected:
|
|
287
|
+
raise http.client.IncompleteRead(raw, expected - length)
|
|
288
|
+
status = int(response.status)
|
|
289
|
+
response_headers = {key.lower(): value for key, value in response.headers.items()}
|
|
290
|
+
response.close()
|
|
291
|
+
if response.will_close or connection.sock is None or status < 200:
|
|
292
|
+
self._discard()
|
|
293
|
+
return status, raw, response_headers
|
|
294
|
+
except BaseException:
|
|
295
|
+
self._discard()
|
|
296
|
+
raise
|
|
297
|
+
finally:
|
|
298
|
+
self._lock.release()
|
|
299
|
+
|
|
300
|
+
|
|
174
301
|
def service_origin(value: str, label: str, *, allow_loopback_http: bool) -> str:
|
|
175
302
|
"""Return ``value`` when it is a bare HTTPS origin, and refuse it otherwise.
|
|
176
303
|
|
|
@@ -149,8 +149,8 @@ from mostlyright.data_harness.thin.v4_matching import CONTRACT_PATHS as MATCHING
|
|
|
149
149
|
#: ``JOB_INVALID`` outright, which in production was every refresh a collection epoch was offered
|
|
150
150
|
#: for rather than only the collection runs. This package must not reach a Studio older than the
|
|
151
151
|
#: commit it pins; ``docs/V4-WORKER-PROTOCOL.md`` states it beside the layout's own ordering rule.
|
|
152
|
-
PINNED_V4_OPENAPI_SOURCE_SHA256 = "
|
|
153
|
-
PINNED_V4_CONTRACT_VERSION = "4.
|
|
152
|
+
PINNED_V4_OPENAPI_SOURCE_SHA256 = "7fc74682ecae99966e007fd97631786ec10e32c3916946b692d4bd90c904d097"
|
|
153
|
+
PINNED_V4_CONTRACT_VERSION = "4.42.0"
|
|
154
154
|
|
|
155
155
|
#: The ``schema_version`` every command body that predates 4.14.0 stamps: ``dataset activity``,
|
|
156
156
|
#: ``table rename``, ``table archive`` and ``dataset archive``. It is the number the 0.25 line
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_public.py
RENAMED
|
@@ -46,6 +46,7 @@ from mostlyright.data_harness.thin.session import (
|
|
|
46
46
|
)
|
|
47
47
|
from mostlyright.data_harness.thin.transport import (
|
|
48
48
|
MAX_JSON_RESPONSE_BYTES,
|
|
49
|
+
ReusableHttpsTransport,
|
|
49
50
|
ThinLaneError,
|
|
50
51
|
Transport,
|
|
51
52
|
UrlLibTransport,
|
|
@@ -896,10 +897,25 @@ class PublicQueryClient(CloudClient):
|
|
|
896
897
|
def __init__(self, credentials, *, transport=None) -> None:
|
|
897
898
|
# Let Cloud's gateway deadline return its own refusal and request id first.
|
|
898
899
|
super().__init__(credentials, transport=transport)
|
|
900
|
+
self._owned_query_transport = (
|
|
901
|
+
ReusableHttpsTransport(timeout=150.0) if transport is None else None
|
|
902
|
+
)
|
|
899
903
|
self._query_client = CloudClient(
|
|
900
|
-
credentials,
|
|
904
|
+
credentials,
|
|
905
|
+
transport=transport if transport is not None else self._owned_query_transport,
|
|
901
906
|
)
|
|
902
907
|
|
|
908
|
+
def close(self) -> None:
|
|
909
|
+
"""Close this client's owned query connection; injected transports stay caller-owned."""
|
|
910
|
+
if self._owned_query_transport is not None:
|
|
911
|
+
self._owned_query_transport.close()
|
|
912
|
+
|
|
913
|
+
def __enter__(self) -> PublicQueryClient:
|
|
914
|
+
return self
|
|
915
|
+
|
|
916
|
+
def __exit__(self, *_args: Any) -> None:
|
|
917
|
+
self.close()
|
|
918
|
+
|
|
903
919
|
def query_table(self, table_id: str, body: Mapping[str, Any]) -> dict[str, Any]:
|
|
904
920
|
answer = self._query_client.call(
|
|
905
921
|
"POST",
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_runs.py
RENAMED
|
@@ -164,6 +164,11 @@ ROOM_FAULT_DETAILS: frozenset[str] = frozenset({"SANDBOX_MEMORY_BOUNDARY"})
|
|
|
164
164
|
#: ``limits.max_source_bytes`` and this run clamp. A clamp at or above 4 GiB therefore cannot
|
|
165
165
|
#: narrow any source, whatever the recipe declares and however many sources it names.
|
|
166
166
|
#:
|
|
167
|
+
#: Under the ``bounded-streaming.v1`` execution policy the worker starts that minimum at the run's
|
|
168
|
+
#: capacity grant instead, which may exceed this floor. The clamp stays inert there because every
|
|
169
|
+
#: source must declare ``limits.max_source_bytes`` and :func:`retry_clamps` raises the clamp to at
|
|
170
|
+
#: least the declared total, which is at least each source's own declaration.
|
|
171
|
+
#:
|
|
167
172
|
#: ⚠ IT WAS 256 TIMES THIS, AND THAT WAS A REFUSAL RATHER THAN A SAFETY. Multiplying by the 256
|
|
168
173
|
#: sources a recipe may declare read the composition as a sum when it is a per-source minimum, so
|
|
169
174
|
#: a run bounded at, say, 8 GiB -- a ceiling that narrows nothing, since 4 GiB binds first -- was
|
|
@@ -31,24 +31,36 @@ def _ref_name(ref: str) -> str:
|
|
|
31
31
|
return ref[len(prefix) :]
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
def _recipe_search_definition(recipe: dict[str, Any]) -> str:
|
|
35
|
-
"""
|
|
34
|
+
def _recipe_search_definition(recipe: dict[str, Any]) -> dict[str, Any]:
|
|
35
|
+
"""Preserve recipe-only restrictions while localizing its search-schema references."""
|
|
36
36
|
|
|
37
|
-
search = recipe["$defs"]["table_plan"]["properties"]["search"]
|
|
38
|
-
ref = search.get("$ref", "")
|
|
39
37
|
marker = "table-search.schema.json#/$defs/"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
|
|
39
|
+
def localize(value: Any) -> Any:
|
|
40
|
+
if isinstance(value, list):
|
|
41
|
+
return [localize(item) for item in value]
|
|
42
|
+
if not isinstance(value, dict):
|
|
43
|
+
return value
|
|
44
|
+
result = {}
|
|
45
|
+
for key, item in value.items():
|
|
46
|
+
if key == "$ref":
|
|
47
|
+
if not isinstance(item, str) or not item.startswith(marker):
|
|
48
|
+
raise ValueError("unsupported recipe search reference")
|
|
49
|
+
result[key] = "#/$defs/" + item[len(marker) :]
|
|
50
|
+
else:
|
|
51
|
+
result[key] = localize(item)
|
|
52
|
+
return result
|
|
53
|
+
|
|
54
|
+
return localize(recipe["$defs"]["table_plan"]["properties"]["search"])
|
|
43
55
|
|
|
44
56
|
|
|
45
57
|
def build_bundle(table_search: dict[str, Any], recipe: dict[str, Any], pin: dict[str, Any]) -> dict:
|
|
46
58
|
"""The closure of the definitions the client checks, from the vendored documents."""
|
|
47
59
|
|
|
48
60
|
definitions = table_search["$defs"]
|
|
49
|
-
recipe_member =
|
|
61
|
+
recipe_member = "recipe_search"
|
|
50
62
|
wanted = [SPEC, recipe_member, CASES]
|
|
51
|
-
selected: dict[str, Any] = {}
|
|
63
|
+
selected: dict[str, Any] = {recipe_member: _recipe_search_definition(recipe)}
|
|
52
64
|
|
|
53
65
|
def collect(value: Any) -> None:
|
|
54
66
|
if isinstance(value, dict):
|
|
@@ -64,6 +76,7 @@ def build_bundle(table_search: dict[str, Any], recipe: dict[str, Any], pin: dict
|
|
|
64
76
|
for item in value:
|
|
65
77
|
collect(item)
|
|
66
78
|
|
|
79
|
+
collect(selected[recipe_member])
|
|
67
80
|
for name in wanted:
|
|
68
81
|
if name not in selected:
|
|
69
82
|
selected[name] = definitions[name]
|
|
@@ -123,6 +136,7 @@ KEYWORDS = frozenset(
|
|
|
123
136
|
"else",
|
|
124
137
|
"anyOf",
|
|
125
138
|
"oneOf",
|
|
139
|
+
"not",
|
|
126
140
|
"description",
|
|
127
141
|
}
|
|
128
142
|
)
|
|
@@ -230,6 +244,11 @@ def _check(schema: Any, value: Any, at: str, definitions: dict, out: list) -> No
|
|
|
230
244
|
_check(branch, value, at, definitions, out)
|
|
231
245
|
for part in schema.get("allOf", []):
|
|
232
246
|
_check(part, value, at, definitions, out)
|
|
247
|
+
if "not" in schema:
|
|
248
|
+
probe: list = []
|
|
249
|
+
_check(schema["not"], value, at, definitions, probe)
|
|
250
|
+
if not probe:
|
|
251
|
+
out.append({"pointer": at or "/", "reason": "matches a forbidden form (not)"})
|
|
233
252
|
for member, exactly_one in (("anyOf", False), ("oneOf", True)):
|
|
234
253
|
options = schema.get(member)
|
|
235
254
|
if options:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/boundaries.md
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/commands.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/live-run.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/one-install.md
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/promote.md
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/readers.md
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/receipts.md
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/recipe-test.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/skills/mr-data-build/references/transforms.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/__init__.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/agent_protocol.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/canonical.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/key_seam.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/page_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/session_probes.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/skill_assets.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/table_manifest.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/__init__.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/acquire.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/activity.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/approvals.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/backoff.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/categories.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/commands.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/download.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/narrative.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/parity.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/probe.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/propose.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_lint.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/recipe_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/research.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/router.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/run_prefix.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/runs.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/session.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/stream.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/support.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/user_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_catalog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_datasets.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_handoff.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_matching.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_query.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_reader.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_search.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_secrets.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_stream.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/v4_tables.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/thin/vocabulary.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/__init__.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/attendance.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/clarification.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/cloud_auth.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/commands/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/credentials.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/login.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/path_kind.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/plain_file.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/remediation.py
RENAMED
|
File without changes
|
{mostlyright_data-0.31.0 → mostlyright_data-0.31.2}/src/mostlyright/data_harness/ux/render.py
RENAMED
|
File without changes
|