From 64e3a46c7c9abf0605dfa02ad3df097c8d281b1c Mon Sep 17 00:00:00 2001 From: Jorge Rivera Date: Sat, 24 Oct 2026 19:20:37 +0200 Subject: [PATCH] feat(client-contract): read proxy refusals as problem documents and re-record at apis 0ba344270 The website proxy's own refusals (rate_limited at 429, transient_unavailable at 502) are application/problem+json documents with code, retryable and trace_id, as every other refusal is. The README, proxy-codes.json, client-codes.json, the scenario schema, the validator and the capture tool drop the {error, retry, detail} body. The validator checks a proxy problem document's media type, members and retryable, and refuses a 202 whose operation reads done. A 202 operation reads pending or running, or failed for a deterministic failure. fetch-spec-accepted-running pins running, and fetch-spec-poll-pacing-changes pins a retry_after_ms that changes from one poll to the next. served/openapi.json is re-captured from apis 0ba344270, which adds the timed_out no-data reason and the optional entity_refs member, and the 31 recorded scenarios are re-recorded live against dev at that commit. Two validator nits: a wrapped docstring line and the test id action-row-no-data-reason-missing. --- python/client-contract/CHANGELOG.md | 8 +- python/client-contract/README.md | 10 +- .../src/dfo_client_contract/client-codes.json | 2 +- .../src/dfo_client_contract/proxy-codes.json | 4 +- .../proxy-codes.schema.json | 2 +- .../dfo_client_contract/scenario.schema.json | 2 +- .../answer-candidate-specs-not-a-list.json | 52 +- .../answer-candidates-choose-fetch.json | 87 +- .../scenarios/answer-catalogue.json | 16 +- .../scenarios/answer-declined.json | 20 +- .../scenarios/answer-definite-fetch.json | 82 +- .../answer-definition-spec-id-mismatch.json | 70 +- .../scenarios/answer-empty-parts.json | 14 +- .../answer-folded-parts-unnamed.json | 204 ++- .../scenarios/answer-mixed-fetch-partial.json | 63 +- .../scenarios/answer-mixed-fetch-raises.json | 63 +- .../answer-nested-specs-unchecked.json | 72 +- .../answer-operations-not-a-list.json | 78 +- .../answer-part-status-not-a-string.json | 59 +- .../answer-several-readings-folded.json | 208 ++- .../answer-spec-without-identity.json | 70 +- .../answer-spec-without-resolved.json | 66 +- .../scenarios/answer-timed-out.json | 55 +- .../scenarios/answer-unknown-enum-value.json | 26 +- .../scenarios/answer-unknown-kind.json | 28 +- .../scenarios/answer-unknown-part-status.json | 59 +- .../scenarios/answer-unsupported-part.json | 59 +- .../choose-candidate-assumed-reading.json | 75 +- .../scenarios/choose-candidate-by-label.json | 75 +- .../choose-candidate-echoes-assumptions.json | 132 +- .../scenarios/choose-candidate-two-parts.json | 268 ++- .../choose-echo-drops-malformed-items.json | 128 +- ...choose-echoes-separate-and-operations.json | 188 ++- .../choose-option-beside-definite.json | 192 ++- .../choose-option-two-part-query.json | 22 +- .../choose-option-without-data-query.json | 22 +- .../scenarios/choose-part-by-mention.json | 78 +- .../scenarios/choose-place-one-part.json | 76 +- .../scenarios/choose-place-two-parts.json | 108 +- .../choose-posts-unsupported-placeholder.json | 184 +- .../choose-refused-answered-part.json | 57 +- ...hoose-refused-mention-names-two-parts.json | 42 +- .../scenarios/choose-refused-no-choice.json | 68 +- .../scenarios/choose-refused-no-options.json | 26 +- .../choose-refused-option-out-of-range.json | 50 +- ...se-refused-part-without-variable-text.json | 102 +- ...choose-refused-shared-candidate-label.json | 50 +- .../choose-refused-shared-label.json | 18 +- .../scenarios/choose-refused-two-choices.json | 42 +- ...hoose-refused-unknown-candidate-label.json | 50 +- .../choose-refused-unknown-label.json | 26 +- .../choose-refused-unknown-part.json | 57 +- .../choose-refused-unknown-status.json | 102 +- .../fetch-frame-several-readings.json | 186 ++- .../scenarios/fetch-null-member.json | 78 +- .../fetch-partial-nothing-answered.json | 28 +- .../fetch-ref-artifact-unlisted.json | 4 +- .../fetch-ref-expired-file-selector.json | 6 +- .../fetch-ref-expired-newer-version.json | 8 +- .../fetch-ref-expired-not-reproducible.json | 12 +- .../fetch-ref-expired-rebuild-other-spec.json | 10 +- ...etch-ref-expired-rebuild-same-version.json | 10 +- .../scenarios/fetch-ref-newest-version.json | 16 +- .../fetch-ref-signed-url-refused-twice.json | 8 +- .../fetch-ref-signed-url-refused.json | 8 +- .../scenarios/fetch-ref-unknown-version.json | 10 +- .../scenarios/fetch-ref.json | 10 +- .../scenarios/fetch-renamed-strict-field.json | 78 +- .../scenarios/fetch-retry-after-504.json | 78 +- .../scenarios/fetch-spec-503-then-504.json | 10 +- .../scenarios/fetch-spec-504-retry-after.json | 10 +- .../fetch-spec-accepted-running.json | 1474 +++++++++++++++++ .../scenarios/fetch-spec-async-build.json | 294 +--- .../scenarios/fetch-spec-digest-mismatch.json | 12 +- .../scenarios/fetch-spec-empty-narrowing.json | 10 +- .../scenarios/fetch-spec-entity-dropped.json | 43 +- .../scenarios/fetch-spec-entity-rebound.json | 43 +- .../fetch-spec-files-route-no-content.json | 12 +- .../fetch-spec-files-route-serves-file.json | 10 +- ...h-spec-files-route-temporary-redirect.json | 12 +- .../fetch-spec-foreign-artifact-url.json | 10 +- .../scenarios/fetch-spec-frame-layout.json | 12 +- .../scenarios/fetch-spec-group-narrowed.json | 39 +- .../fetch-spec-group-origin-rebound.json | 43 +- .../scenarios/fetch-spec-known-sentence.json | 14 +- .../fetch-spec-manifest-without-identity.json | 10 +- ...-spec-manifest-without-schema-version.json | 10 +- .../scenarios/fetch-spec-narrowed.json | 41 +- ...tch-spec-operation-failed-resubmitted.json | 298 +--- .../scenarios/fetch-spec-poll-not-found.json | 2 +- .../fetch-spec-poll-pacing-changes.json | 1474 +++++++++++++++++ ...-spec-poll-rate-limited-not-retryable.json | 2 +- .../fetch-spec-poll-rate-limited.json | 294 +--- .../fetch-spec-poll-refused-backoff.json | 272 +-- .../fetch-spec-poll-refused-retry-after.json | 294 +--- .../scenarios/fetch-spec-poll-refused.json | 294 +--- .../fetch-spec-relative-location.json | 10 +- .../scenarios/fetch-spec-request-invalid.json | 10 +- .../fetch-spec-resubmit-other-spec.json | 37 +- .../fetch-spec-same-origin-artifact-url.json | 10 +- .../fetch-spec-signed-fetch-partial.json | 12 +- .../fetch-spec-storage-artifact-url.json | 10 +- .../scenarios/fetch-spec-strict-warning.json | 6 +- .../scenarios/fetch-strict-info-notice.json | 78 +- .../scenarios/mint-async-build.json | 298 +--- .../newest-version-unreadable-page.json | 14 +- .../operation-failed-without-error.json | 6 +- .../scenarios/operation-resume.json | 184 +- .../resubmit-candidates-sibling.json | 124 +- ...ubmit-placeholder-without-restatement.json | 96 +- .../scenarios/search-body-not-an-object.json | 28 +- .../scenarios/search-place-ambiguous.json | 30 +- .../scenarios/search-proxy-rate-limited.json | 44 +- .../scenarios/search-proxy-unavailable.json | 48 +- .../scenarios/search-retry-after-503.json | 26 +- .../scenarios/search-server-warning.json | 78 +- .../scenarios/search-sunset-warning.json | 52 +- .../search-two-parts-place-ambiguous.json | 46 +- .../scenarios/search-warning-top5.json | 74 +- .../dfo_client_contract/served/SOURCE.json | 2 +- .../dfo_client_contract/served/openapi.json | 71 +- tools/README.md | 2 +- tools/capture_client_contract.py | 123 +- tools/tests/test_validate_client_contract.py | 63 +- tools/validate_client_contract.py | 90 +- 125 files changed, 6747 insertions(+), 4231 deletions(-) create mode 100644 python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-accepted-running.json create mode 100644 python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json diff --git a/python/client-contract/CHANGELOG.md b/python/client-contract/CHANGELOG.md index a48bc05..ce4270a 100644 --- a/python/client-contract/CHANGELOG.md +++ b/python/client-contract/CHANGELOG.md @@ -7,20 +7,20 @@ All notable changes to the `dfo-spec-kit-client-contract` Python package will be ### Added - Package scaffolding (uv, ruff, ty, pytest). -- `served/openapi.json`, the composed dfo-apis app's OpenAPI document, and `served/SOURCE.json`, naming dfo-apis commit `035d29cd05fb31d7cb47cfb33197d4002f773df6`. +- `served/openapi.json`, the composed dfo-apis app's OpenAPI document, and `served/SOURCE.json`, naming dfo-apis commit `0ba344270784ae9929a369da8acd00b399dfced8`. The document admits `timed_out` as a no_data reason and the optional `entity_refs` on each answer part, a list of `EntityRefs`, the graph nodes each restatement entity text binds. - `strict-fields.json` and its schema: 29 members that stay required and non-nullable, each one a client reads, and the answer kinds, part statuses and operation statuses the clients branch on. - `actions.json` and its schema: the caller's next step for each of the 102 active refusal codes on `problem_details` or `no_data_reason`, with the gap kind of each no_data reason. - The status fallback for a refusal whose code has no row: 400 and 422 to `InvalidRequestError`, 401 to `AuthenticationError`, 403 to `PermissionDeniedError`, 404 and 410 to `NotFoundError`, 408 to `DfoTimeoutError`, 429 to `RateLimitError`, and any other 4xx or 5xx to `InvalidRequestError` or `ServerError`. -- `scenario.schema.json`, the scenario record, and 118 scenarios: 31 recorded against the deployed dfo-apis dev app at `035d29cd0`, and 87 synthetic, each derived from a recorded one by a one-line edit, with 19 binary bodies totalling 1,124,502 bytes and records and bodies together 13,080,568 bytes. The scenarios cover the several-part choice entries and the assumptions each identity entry echoes, a picked reading whose assumption Search states in its answer, the place choice through a no_data part's options, the choice refusals, a part without variable_text, an unknown status without a restatement, a shared label, a one-part option whose data_query holds two parts, the separate and operations echo, an unsupported part's placeholder, the timed_out, unsupported and unknown gaps, an unknown answer kind, the `SearchWarning` rule, the stacked dataset's `part` column, the frame layout, a strict fetch's `DataWarning`, a spec fetch that rebinds one of two entity roles and keeps the other, one that drops a role bound to null, a spec whose destination is a named group fetched with a window or with its origin rebound, whose sentence lookup posts the groups of the roles the build left bound, a twice cut-off build, a cut-off build retried after its Retry-After, a build refused 504 then 503 and one refused 503 then 504, a refused build, a build refused 501 `capability_unavailable`, a digest mismatch, a signed URL refused on both rounds, a relative files-route Location, an artifact url on a foreign origin, on the storage host and absolute on the API's origin, a manifest definition without identity or schema_version, a Search spec without identity or resolved, nested specs no rule reads, an empty parts list, a Search body that is not an object, a codeless 503 problem document that is not retryable, a 401, an identity resubmit answering another spec, a part whose status is not a string, a Search spec whose definition names another spec_id, a Search response with no JSON body, an option with no data_query, empty entities and facets, a Sunset header issued once, `x-dfo-warning` messages and a Deprecation and Sunset pair, an unreadable versions page, a mint and a spec fetch whose build answers 202 and is polled to done, a resumed operation, a rate-limited poll, 503 polls retried within the budget an answered poll restores, a 404 poll that raises, a failed operation posted again, a failed operation with no error, and a ref whose stored file expired, read through the file selector, rebuilt at the same version, at a newer one, or refused with the newest version read from the versions route: the first version it lists with no `base_content_version`, the newest plain build, so a derived version listed before it is skipped. +- `scenario.schema.json`, the scenario record, and 120 scenarios: 31 recorded against the deployed dfo-apis dev app at `0ba344270`, and 89 synthetic, each derived from a recorded one by a one-line edit, with 19 binary bodies totalling 1,124,502 bytes and records and bodies together 13,161,129 bytes. The scenarios cover the several-part choice entries and the assumptions each identity entry echoes, a picked reading whose assumption Search states in its answer, the place choice through a no_data part's options, the choice refusals, a part without variable_text, an unknown status without a restatement, a shared label, a one-part option whose data_query holds two parts, the separate and operations echo, an unsupported part's placeholder, the timed_out, unsupported and unknown gaps, an unknown answer kind, the `SearchWarning` rule, the stacked dataset's `part` column, the frame layout, a strict fetch's `DataWarning`, a spec fetch that rebinds one of two entity roles and keeps the other, one that drops a role bound to null, a spec whose destination is a named group fetched with a window or with its origin rebound, whose sentence lookup posts the groups of the roles the build left bound, a twice cut-off build, a cut-off build retried after its Retry-After, a build refused 504 then 503 and one refused 503 then 504, a refused build, a build refused 501 `capability_unavailable`, a digest mismatch, a signed URL refused on both rounds, a relative files-route Location, an artifact url on a foreign origin, on the storage host and absolute on the API's origin, a manifest definition without identity or schema_version, a Search spec without identity or resolved, nested specs no rule reads, an empty parts list, a Search body that is not an object, a codeless 503 problem document that is not retryable, a 401, an identity resubmit answering another spec, a part whose status is not a string, a Search spec whose definition names another spec_id, a Search response with no JSON body, an option with no data_query, empty entities and facets, a Sunset header issued once, `x-dfo-warning` messages and a Deprecation and Sunset pair, an unreadable versions page, a mint and a spec fetch whose build answers 202 and is polled to done, a resumed operation, a rate-limited poll, 503 polls retried within the budget an answered poll restores, a 202 that reads running, polls whose `retry_after_ms` changes from one to the next, a 404 poll that raises, a failed operation posted again, a failed operation with no error, and a ref whose stored file expired, read through the file selector, rebuilt at the same version, at a newer one, or refused with the newest version read from the versions route: the first version it lists with no `base_content_version`, the newest plain build, so a derived version listed before it is skipped. - `client-codes.json` and its schema: the 23 codes a client sets on the errors it raises itself, each with its error class, retryable flag and condition, disjoint from `actions.json` and `registries/codes.json`, and the `client_codes()` and `client_codes_schema()` accessors. Every scenario error the client raises itself carries its code, and `refusal_without_code` names a refusal whose body carries no code. -- `proxy-codes.json` and its schema, the website proxy's `rate_limited` and `transient_unavailable` codes with their statuses, and `warning-codes.json` and its schema, the 6 codes a client sets on the warnings it issues itself, with the `proxy_codes()` and `warning_codes()` accessors. +- `proxy-codes.json` and its schema, the website proxy's `rate_limited` and `transient_unavailable` codes with their statuses, which the proxy sends in problem documents of the shape every refusal has, both retryable, with `Retry-After` on the 429, so a client reads one refusal shape, and `warning-codes.json` and its schema, the 6 codes a client sets on the warnings it issues itself, with the `proxy_codes()` and `warning_codes()` accessors. - `ref_digest_changed` in `warning-codes.json`, a `DfoWarning` for a ref member whose `content_version` serves a file with another digest than the ref's, because the server rendered the same data again. The client returns the data, with no error under strict. - `timed_out` in `actions.json` and `registries/codes.json`, the no_data reason Search gives a part it left unresolved at the request's time limit, with action `ask_data_question` and gap kind `timed_out`, which `actions.schema.json` now admits. The client-side `timeout` code, a transport timeout, is unchanged. - Error outcomes give the error's `trace_id`, the body's, else the `x-dfo-trace-id` header's, else null. Scenario outcomes give `retry_waits`, the waits before each retry, and `warnings`, the warning codes a step's responses issued. Scenario steps take no `timeout`. - `dataset-ref.schema.json`, the frozen `DatasetRef` format, with accepted and rejected examples. - `without_party_totals` in the ref's artifact rendering, `true` for the version rendered with party totals left out and absent for a plain rendering, with `ref-without-party-totals` and `ref-without-party-totals-false-rejected` as its examples. - `tools/capture_client_contract.py`, which captures `served/openapi.json` from a dfo-apis checkout in process and records the scenarios against a base URL, dev by default, or with `record --offline` derives their outcomes again from the records with no request. A local app's signed URLs are written as the storage URLs a deployment signs. -- `tools/validate_client_contract.py`, which checks the contract against its schemas, the served document and `registries/codes.json`, checks `client-codes.json` against them and against the reasons the key-lookup rule raises, and checks each scenario's `expect` against the outcomes its exchanges, `actions.json` and `client-codes.json` give, each Search request against the input its steps derive, a sentence lookup's `entity_groups` included, each build's `input.scope` against the narrowing its step names over the spec's bound roles, each build's options against its layout, each Search request's whole body, each download against its artifact's digest, each recorded scenario's commit against `served/SOURCE.json`, each proxy refusal's code against `proxy-codes.json`, and each absolute URL against the storage host, each ref example's members against the dataset members and downloaded files of the scenario it names, and the scenarios directory against a 16,000,000-byte budget for records and bodies together. A record that ends a run of retries while a retry remains does not fit. The outcomes include each long build's operation id, poll waits and resubmissions, and a `VersionUnavailableError`'s newest version. +- `tools/validate_client_contract.py`, which checks the contract against its schemas, the served document and `registries/codes.json`, checks `client-codes.json` against them and against the reasons the key-lookup rule raises, and checks each scenario's `expect` against the outcomes its exchanges, `actions.json` and `client-codes.json` give, each Search request against the input its steps derive, a sentence lookup's `entity_groups` included, each build's `input.scope` against the narrowing its step names over the spec's bound roles, each build's options against its layout, each Search request's whole body, each download against its artifact's digest, each recorded scenario's commit against `served/SOURCE.json`, each problem document's code against `registries/codes.json` or, for the website proxy's, `proxy-codes.json`, each proxy problem document's content type, members and `retryable: true`, each 202 against an operation that reads `done`, and each absolute URL against the storage host, each ref example's members against the dataset members and downloaded files of the scenario it names, and the scenarios directory against a 16,000,000-byte budget for records and bodies together. A record that ends a run of retries while a retry remains does not fit. The outcomes include each long build's operation id, poll waits and resubmissions, and a `VersionUnavailableError`'s newest version. - The client rules and their vectors: the credentials path and file format, the key lookup order, with an empty `api_key` refused as `key_empty` and an empty profile key as `profile_without_key`, the key format check, and the cache directory and layout. [unreleased]: https://github.com/DevelopmentFinanceObservatory/spec-kit/commits/main/python diff --git a/python/client-contract/README.md b/python/client-contract/README.md index 601c45b..b0e93d9 100644 --- a/python/client-contract/README.md +++ b/python/client-contract/README.md @@ -97,7 +97,7 @@ The required members are each part's `status` and its payload (`spec`, `candidat | `report` | `ServerError` | Reports the trace id, after the client's retries | | `upgrade` | `ContractError` | Upgrades the client | -A code that maps to `no_data_reason` also carries `gap_kind`, the kind of gap a no_data part with that reason becomes: `choice`, `no_data`, `not_understood`, `unsupported` or `timed_out`. `timed_out` is a part Search left unresolved at its time limit; sending the question again, or a narrower one, may answer it. `choose` goes with `choice` and only with it. `choose` and `ask_data_question` name a next step inside an answer, so a code that also reaches a problem document takes another action. The website proxy's own `{error, retry, detail}` body carries its code in `error`. `proxy-codes.json` lists those codes with their status, `rate_limited` at 429 and `transient_unavailable` at 502, and the validator refuses a proxy body whose `error` it does not list at that status. No proxy code has a row here, so a client raises a proxy refusal with the class its status maps to. `capability_unavailable` is a well-formed request for a format, reshape or conversion class the deployment does not enable, answered 501; its action is `fix_request`, since the caller asks for another one, and `fetch-spec-capability-unavailable` pins it. +A code that maps to `no_data_reason` also carries `gap_kind`, the kind of gap a no_data part with that reason becomes: `choice`, `no_data`, `not_understood`, `unsupported` or `timed_out`. `timed_out` is a part Search left unresolved at its time limit. Sending the question again, or a narrower one, may answer it. `choose` goes with `choice` and only with it. `choose` and `ask_data_question` name a next step inside an answer, so a code that also reaches a problem document takes another action. The website proxy answers its own refusals with problem documents of the same shape, with `type`, `title`, `status`, `detail`, `code`, `retryable` and `trace_id`, the trace id repeated in the `x-dfo-trace-id` header. `proxy-codes.json` lists their codes with their status, `rate_limited` at 429, which also sends `Retry-After`, and `transient_unavailable` at 502, both retryable. The validator refuses a problem document whose code is neither an active registry code nor a proxy code at that status. No proxy code has a row here, so a client raises a proxy refusal with the class its status maps to: `RateLimitError` for `rate_limited`, which `search-proxy-rate-limited` pins, and `ServerError` for `transient_unavailable`, which `search-proxy-unavailable` pins. `capability_unavailable` is a well-formed request for a format, reshape or conversion class the deployment does not enable, answered 501. Its action is `fix_request`, since the caller asks for another one, and `fetch-spec-capability-unavailable` pins it. A client maps a refusal whose code has no row, or that carries no code, on its HTTP status: @@ -112,13 +112,13 @@ A client maps a refusal whose code has no row, or that carries no code, on its H | any other 4xx | `InvalidRequestError` | | any other 5xx | `ServerError` | -A 408 is a timeout the caller retries, and a 410 names a resource that is gone, so the caller stops as it does on a 404. A client reads a refusal's body, a problem document or the proxy's own, when its content type is `application/problem+json` or `application/json`; a body of any other type reads as no body, so the refusal carries no code. A no_data reason with no row becomes a `no_data` gap. +A 408 is a timeout the caller retries, and a 410 names a resource that is gone, so the caller stops as it does on a 404. A client reads a refusal's body as a problem document when its content type is `application/problem+json` or `application/json`; a body of any other type reads as no body, so the refusal carries no code. A no_data reason with no row becomes a `no_data` gap. An answer's gaps follow from its parts. A candidates part is a `choice` gap, its options the candidates. A no_data part is a gap of its reason's `gap_kind`, its options the no_data `options`, and of kind `timed_out` instead when the answer's `diagnostics.timed_out` is true. An unsupported part is an `unsupported` gap. A part whose status a client does not know is an `unknown` gap. ## Client codes -`client-codes.json` lists, sorted by code, each code a client sets on an error it raises when no problem document carries one: the `code`, the error `class` it raises, `retryable`, and a one-line `condition`. `retryable` is the flag both clients generate onto the error: `deadline_exceeded`, `download_failed` and `network_error` are retryable, `digest_mismatch` and the rest are not, and `refusal_without_code` is retryable as its status is, which its row gives as `by_status`. Both clients set an error's `code` from this list, so every error a client raises carries a code. A refusal keeps the server's code: the problem document's `code`, or the website proxy's `error`. A refusal whose body carries neither raises `refusal_without_code` with the class its HTTP status maps to, which its row gives as `by_status`. No other row does. A problem document without a code still gives the error its `retryable` and `trace_id`, so a 503 whose body says `retryable: false` raises at once, which `search-refused-without-code` pins. Every refusal's trace id is the response's trace id, as the trace-id rule under Scenarios gives it. `search-refused-without-code` pins the body's winning over the header, and `search-unauthorized` the header's for a refusal with no body. No client code is a code in `actions.json` or `registries/codes.json`, and each class is one the scenario schema names. Each reason the key-lookup rule raises, `key_empty`, `profile_not_found`, `profile_without_key` and `credentials_file_invalid`, is a row of class `AuthenticationError`, as are `key_invalid`, a key outside visible ASCII, and `credentials_file_unreadable`, a credentials file that exists but cannot be read. `header_invalid`, a header value with a control character, `insecure_transport`, a key over plain http to a non-loopback host, and `base_url_invalid`, a base URL that is empty, not absolute http or https, or carries userinfo, are `InvalidRequestError` rows. `response_too_large`, a decoded body past its cap, is a `ServerError` row. None of these six is retryable. The list holds no warning. `warning-codes.json` lists, sorted by code, each code a client sets on a warning it issues itself, with its class and condition: `ref_digest_changed`, a `DfoWarning`, for a ref member whose `content_version` serves a file with another digest than the ref's, because the server rendered the same data again, where the client returns the data; `route_deprecated`, a `DfoDeprecationWarning`, for a `Deprecation` or `Sunset` header; `server_warning`, a `DfoWarning`, for an `x-dfo-warning` header; and `key_checksum_mismatch`, `key_not_base62` and `key_unknown_prefix`, each a `DfoWarning`, for a key that fails the key-format rule with that reason. Both clients generate their warning codes from it and issue no other. No warning code is a code in another table or in `registries/codes.json`. A `SearchWarning` carries the code of the one way the readings differ from the question, a departure's or a warning's code or the verb of an operation Search did not run, and a null code when they differ in several ways. A `DataWarning` carries the manifest warning's code. +`client-codes.json` lists, sorted by code, each code a client sets on an error it raises when no problem document carries one: the `code`, the error `class` it raises, `retryable`, and a one-line `condition`. `retryable` is the flag both clients generate onto the error: `deadline_exceeded`, `download_failed` and `network_error` are retryable, `digest_mismatch` and the rest are not, and `refusal_without_code` is retryable as its status is, which its row gives as `by_status`. Both clients set an error's `code` from this list, so every error a client raises carries a code. A refusal keeps its problem document's `code`, the website proxy's included. A refusal whose body carries no code raises `refusal_without_code` with the class its HTTP status maps to, which its row gives as `by_status`. No other row does. A problem document without a code still gives the error its `retryable` and `trace_id`, so a 503 whose body says `retryable: false` raises at once, which `search-refused-without-code` pins. Every refusal's trace id is the response's trace id, as the trace-id rule under Scenarios gives it. `search-refused-without-code` pins the body's winning over the header, and `search-unauthorized` the header's for a refusal with no body. No client code is a code in `actions.json` or `registries/codes.json`, and each class is one the scenario schema names. Each reason the key-lookup rule raises, `key_empty`, `profile_not_found`, `profile_without_key` and `credentials_file_invalid`, is a row of class `AuthenticationError`, as are `key_invalid`, a key outside visible ASCII, and `credentials_file_unreadable`, a credentials file that exists but cannot be read. `header_invalid`, a header value with a control character, `insecure_transport`, a key over plain http to a non-loopback host, and `base_url_invalid`, a base URL that is empty, not absolute http or https, or carries userinfo, are `InvalidRequestError` rows. `response_too_large`, a decoded body past its cap, is a `ServerError` row. None of these six is retryable. The list holds no warning. `warning-codes.json` lists, sorted by code, each code a client sets on a warning it issues itself, with its class and condition: `ref_digest_changed`, a `DfoWarning`, for a ref member whose `content_version` serves a file with another digest than the ref's, because the server rendered the same data again, where the client returns the data; `route_deprecated`, a `DfoDeprecationWarning`, for a `Deprecation` or `Sunset` header; `server_warning`, a `DfoWarning`, for an `x-dfo-warning` header; and `key_checksum_mismatch`, `key_not_base62` and `key_unknown_prefix`, each a `DfoWarning`, for a key that fails the key-format rule with that reason. Both clients generate their warning codes from it and issue no other. No warning code is a code in another table or in `registries/codes.json`. A `SearchWarning` carries the code of the one way the readings differ from the question, a departure's or a warning's code or the verb of an operation Search did not run, and a null code when they differ in several ways. A `DataWarning` carries the manifest warning's code. ## Scenarios @@ -176,9 +176,9 @@ The records also fix these client rules: - Fetching an answer with a gap raises `IncompleteAnswerError` before any request, unless the fetch is partial and some part has a reading. - A fetch of an answer issues one `SearchWarning` when a definite part has an operation Search did not run, a departure, or a warning at severity `warn` or `degraded` with a `message`, or the answer's `diagnostics.warnings` holds such a warning. An `info` warning, a warning with no `message`, and an operation that does not read under Strict fields issue nothing. Each way is one line a client shows: `Not done: ()` coded by the verb, the phrase quoted as a JSON string that keeps non-ASCII characters as they are, the departure's `text` coded by its code, or `Note: ` coded by the warning's code, in part order with the diagnostics warnings last, and ways that show the same line count once, under the first one's code. A strict fetch raises the `SearchWarning` before any build, with the code of its one line, or a null code when there are several lines. A strict fetch raises it before the `frame` layout's several-member check. - A ref's version is found in this order: the snapshot route and the files route at the stored digest; the file selector, `GET /datasets/{id}/{content_version}/file` with the ref's rendering as the query; and a build of the ref's spec in the ref's rendering, which must answer the ref's `spec_id` and the same `content_version`. Both recovery steps keep the ref's identity, so a recovered member carries the ref's `spec_id` and `content_version`: a snapshot manifest whose `definition.spec_id` or `content_version` is not the ref's, or a rebuild manifest whose `definition.spec_id` is not the ref's, raises `ContractError` `contract_violation` before any download, which `fetch-ref-expired-rebuild-other-spec` pins for the rebuild. A snapshot refusal other than `artifact_expired` ends the lookup, so `snapshot_not_found` raises `NotFoundError` with no further request. A files route or selector refusal of `artifact_expired`, `artifact_not_found` or `not_found` takes the next step, and a selector file of another digest is not the stored file. A snapshot manifest whose artifacts list no artifact of the ref member's digest sends the client to the selector in the ref member's own rendering, and a file that hashes to that digest gives the dataset, which `fetch-ref-artifact-unlisted` pins. A rebuild that answers another version, or that raises `InvalidRequestError`, `NotFoundError` or `VersionUnavailableError`, ends in `VersionUnavailableError` with the first refusal's code, or `version_unavailable` when nothing refused. Its `newest_version` is the version the rebuild answered, or else the newest stored version, as a `newest_version` step finds it: the first version `GET /datasets/{id}/versions?limit=100` lists with a null `base_content_version`, the newest plain build, read page by page through `&cursor=` with each page's `next_cursor` until one is listed. The route lists versions newest first and needs no key. A version with a `base_content_version` is derived from a plain build, a groupby collapse or a party-totals cut, and is skipped, which `fetch-ref-newest-version` pins. The newest version is null when the list ends without a plain version or the route refuses with `NotFoundError`. Any other refusal of the versions route raises, and a page whose `versions` is not a list of versions each with a `content_version` and a `base_content_version` that is a string or null, or whose `next_cursor` is neither a string nor null, raises `ContractError` `contract_violation`, which `newest-version-unreadable-page` pins. -- A build answers 200 with the manifest, or 202 with an operation the client polls at `/datasets/operations/{operation_id}`, the id of the operation it holds. A mint's build answers 202. A record whose mint answers 200 fits no mint step. Before each poll it waits the `Retry-After` of the refusal that answered the last poll, whatever its status, as every retry of a refused request waits; else the last operation resource's `retry_after_ms`, else the `Retry-After` of the last answered poll, the response that carried that resource, else a backoff of 1, 2, 4 and then 8 seconds that advances one step each time it is used, a poll after a refusal included. +- A build answers 200 with the manifest, or 202 with an operation the client polls at `/datasets/operations/{operation_id}`, the id of the operation it holds. The 202 reads `pending` or `running`, because a submission starts a build or joins one under way, and a `done` operation left by an earlier submission of a rejected head is built again. A deterministic failure answers a 202 that reads `failed`. `fetch-spec-async-build` pins `pending` and `fetch-spec-accepted-running` pins `running`. A mint's build answers 202. A record whose mint answers 200 fits no mint step. Before each poll it waits the `Retry-After` of the refusal that answered the last poll, whatever its status, as every retry of a refused request waits; else the last operation resource's `retry_after_ms`, else the `Retry-After` of the last answered poll, the response that carried that resource, else a backoff of 1, 2, 4 and then 8 seconds that advances one step each time it is used, a poll after a refusal included. `fetch-spec-poll-pacing-changes` pins a `retry_after_ms` that changes from one poll to the next, so a client waits each poll's own value. - A retryable 429 poll spends no retry, and a 429 whose body says it is not retryable raises at once, as a refusal's `retryable` outranks its status, which `fetch-spec-poll-rate-limited-not-retryable` pins. Any other retryable refused poll spends one of the two retries, which a poll that answers restores, and a refusal that is not retryable raises. `fetch-spec-poll-refused` pins two 503s polled again after an answered poll, `fetch-spec-poll-refused-backoff` a 503 with no `Retry-After` among polls no response paces, after which the backoff advances, `fetch-spec-poll-refused-retry-after` a 503 whose `Retry-After` paces the next poll, and `fetch-spec-poll-not-found` a 404 that raises at once. A poll that answers a failed operation whose error is retryable posts the same build once more and polls the operation it starts; a second failure, an error that is not retryable, and a resumed operation, whose build request the client does not hold, raise the operation's error. A refused poll whose code is `operation_failed` is a failed operation with that error. A failed operation whose resource carries no `error` raises `ServerError` with `operation_failed`, retryable by status 500 as a refusal without a document is, which `operation-failed-without-error` pins. A 202 or resumed operation that already reads `failed` raises its error before any poll. -- Any other refusal is retried when it is retryable: as a problem document's `retryable` says, or the website proxy's `retry` of `retry_after_delay`, else when its status is 408, 429, 500, 502, 503 or 504. A client makes two retries by default, and the scenarios assume that default. A build's POST shares those two retries with every other refusal of it, and once a 504 cuts the build off the client posts it once more only, whatever that post answers: a build refused 504 then 503 raises the 503, a build refused 503 then 504 is posted once more after the 504, and a second 504 raises. `fetch-spec-504-then-503`, `fetch-spec-503-then-504` and `fetch-spec-504-twice` pin the three. A refusal that is not retryable, or one past the retries, raises its error. +- Any other refusal is retried when it is retryable: as its problem document's `retryable` says, else when its status is 408, 429, 500, 502, 503 or 504. A client makes two retries by default, and the scenarios assume that default. A build's POST shares those two retries with every other refusal of it, and once a 504 cuts the build off the client posts it once more only, whatever that post answers: a build refused 504 then 503 raises the 503, a build refused 503 then 504 is posted once more after the 504, and a second 504 raises. `fetch-spec-504-then-503`, `fetch-spec-503-then-504` and `fetch-spec-504-twice` pin the three. A refusal that is not retryable, or one past the retries, raises its error. - Each retry waits the refusal's `Retry-After` when it carries one, and otherwise the client's backoff for that attempt: 0.5 seconds before the first retry, doubling to at most 8. The build's 504 cut-off retry follows the same rule. `retry_waits` pins these waits, and `fetch-spec-504-retry-after` pins a cut-off that carries `Retry-After`. - A 401 resolves the key again by the key-lookup rule. When the key changed, the client sends the request once more at once, with no wait and spending no retry. When it did not, or the second answer is a 401 too, the 401 raises `AuthenticationError`. A replay's key never changes, so `search-unauthorized` pins the second case and no scenario the first. - A `request(method, path)` whose `path` is not a path on the base URL, because it starts with `//` or names a scheme, raises `InvalidRequestError` `invalid_argument` before any request. No scenario step makes such a request. diff --git a/python/client-contract/src/dfo_client_contract/client-codes.json b/python/client-contract/src/dfo_client_contract/client-codes.json index e4486fe..025fdf5 100644 --- a/python/client-contract/src/dfo_client_contract/client-codes.json +++ b/python/client-contract/src/dfo_client_contract/client-codes.json @@ -119,7 +119,7 @@ "code": "refusal_without_code", "class": "by_status", "retryable": "by_status", - "condition": "A refusal whose body carries no code: neither a problem document nor the website proxy's own body." + "condition": "A refusal whose body carries no code: no problem document, or one without a code." }, { "code": "response_too_large", diff --git a/python/client-contract/src/dfo_client_contract/proxy-codes.json b/python/client-contract/src/dfo_client_contract/proxy-codes.json index abba574..3bdf54e 100644 --- a/python/client-contract/src/dfo_client_contract/proxy-codes.json +++ b/python/client-contract/src/dfo_client_contract/proxy-codes.json @@ -4,12 +4,12 @@ { "code": "rate_limited", "status": 429, - "condition": "The website proxy's rate limit for the caller's address is spent; the response carries Retry-After." + "condition": "The website proxy's rate limit for the caller's address is spent; the problem document is retryable and the response carries Retry-After." }, { "code": "transient_unavailable", "status": 502, - "condition": "The website proxy could not reach the API behind it." + "condition": "The website proxy could not reach the API behind it; the problem document is retryable." } ] } diff --git a/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json b/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json index 6cec2dd..7e79f73 100644 --- a/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json +++ b/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json", "title": "Proxy codes", - "description": "Each code the website proxy's own {error, retry, detail} body carries in error, with the HTTP status it answers and the condition, sorted by code. A client raises such a refusal with the error's code and the class its status maps to.", + "description": "Each code the website proxy's own problem documents carry, with the HTTP status it answers and the condition, sorted by code. A client raises such a refusal with its code and the class its status maps to.", "type": "object", "additionalProperties": false, "required": [ diff --git a/python/client-contract/src/dfo_client_contract/scenario.schema.json b/python/client-contract/src/dfo_client_contract/scenario.schema.json index f0d9256..5499a73 100644 --- a/python/client-contract/src/dfo_client_contract/scenario.schema.json +++ b/python/client-contract/src/dfo_client_contract/scenario.schema.json @@ -906,7 +906,7 @@ ] }, "code": { - "description": "A refusal's code: the problem document's code, the website proxy's error member, or refusal_without_code for a body with neither. A SearchWarning's code is the server's warning or departure code, or the verb of an operation Search did not run, or null when the readings differ from the question in several ways. A DataWarning's code is the manifest warning's. Any other error the client raises itself carries its code from client-codes.json.", + "description": "A refusal's code: its problem document's code, the website proxy's included, or refusal_without_code for a body without one. A SearchWarning's code is the server's warning or departure code, or the verb of an operation Search did not run, or null when the readings differ from the question in several ways. A DataWarning's code is the manifest warning's. Any other error the client raises itself carries its code from client-codes.json.", "type": [ "string", "null" diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json index 1fe86c2..20a8675 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -41,15 +41,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -67,28 +67,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -280,6 +280,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -802,7 +810,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2336,7 +2344,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2571,7 +2579,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json index 023638d..524967e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:36:53Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:07Z" }, "call": [ { @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -49,15 +49,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -75,28 +75,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -288,6 +288,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -810,7 +818,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2344,7 +2352,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2625,7 +2633,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8122d1bf0e034c8b833ac2f202e2a9c0" + "x-dfo-trace-id": "bb50ec0b45244567bf259cee9e6de857" }, "json": { "schema_version": 1, @@ -2634,11 +2642,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8122d1bf0e034c8b833ac2f202e2a9c0", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bb50ec0b45244567bf259cee9e6de857", "warnings": [], "timing_ms": { - "total": 637, + "total": 486, "by_step": { "coverage": 0 } @@ -2651,21 +2659,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 590, + "total": 436, "by_step": { - "validate": 0, - "walk": 215, + "validate": 1, + "walk": 182, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 257, - "bind": 0, + "shape": 158, + "bind": 1, "where_places": 0, - "materialise": 116, + "materialise": 93, "answer": 1, - "options": 1 + "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3181,7 +3190,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -3402,7 +3411,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "5e77a52f3b71403a8932a67a979c4608" + "x-dfo-trace-id": "cbcf0bde995644728537c2ed3abc531e" }, "json": { "schema_version": 1, @@ -3610,7 +3619,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:57.109042+00:00" + "confirmed_at": "2026-10-24T16:30:17.280841+00:00" }, "warnings": [], "diagnostics": [ @@ -3787,7 +3796,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-22T17:34:00.253769Z" @@ -3805,7 +3814,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A38f1b5db24567c68f9791ac00bce803082c607f23c78688edf2d95e0778a070a?X-Goog-Signature=redacted", - "x-dfo-trace-id": "4893fb552b5f47aa836ba70d4d4512b9" + "x-dfo-trace-id": "86f0988c26f742f59efa2fba3ebcf738" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json index 9b83090..a15c230 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:10Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:26Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "766195ed73194e73a4a9ab62bcdac9cf" + "x-dfo-trace-id": "a1f54c790c9c4278af93e96086733481" }, "json": { "schema_version": 1, @@ -45,14 +45,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "766195ed73194e73a4a9ab62bcdac9cf", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "a1f54c790c9c4278af93e96086733481", "warnings": [], "timing_ms": { - "total": 787, + "total": 1079, "by_step": { "coverage": 0, - "extract": 785, + "extract": 1079, "entity_check": 0, "cache_lookup": 0 } @@ -84,7 +84,7 @@ "error": { "class": "DeclinedError", "code": "answer_declined", - "trace_id": "766195ed73194e73a4a9ab62bcdac9cf" + "trace_id": "a1f54c790c9c4278af93e96086733481" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json index b29eb4b..dfd7f8d 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:09Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:24Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b0408d5777d8455dbb1147f8ad74ed96" + "x-dfo-trace-id": "5b2bc45dc7f7419cb3dfb98ed9bf68a3" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "b0408d5777d8455dbb1147f8ad74ed96", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "5b2bc45dc7f7419cb3dfb98ed9bf68a3", "warnings": [], "timing_ms": { - "total": 900, + "total": 1050, "by_step": { - "coverage": 0, - "extract": 898, - "entity_check": 1, + "coverage": 1, + "extract": 1049, + "entity_check": 0, "cache_lookup": 0 } }, @@ -90,7 +90,7 @@ "error": { "class": "DeclinedError", "code": "answer_declined", - "trace_id": "b0408d5777d8455dbb1147f8ad74ed96" + "trace_id": "5b2bc45dc7f7419cb3dfb98ed9bf68a3" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json index 45f4ec1..4275254 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:36:46Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:01Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -45,21 +45,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -69,30 +71,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -110,6 +112,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -525,7 +541,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1178,7 +1194,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3776,7 +3792,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4177,7 +4193,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4206,7 +4222,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4505,7 +4521,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4522,7 +4538,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json index f76ba2b..9c3c84d 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -41,21 +41,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -65,30 +67,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -106,6 +108,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -521,7 +537,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1174,7 +1190,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3691,7 +3707,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d" + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json index 781f7ea..35da4e4 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -41,15 +41,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -100,7 +100,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "a321fb82bfba461b9dc922634789650f" + "trace_id": "304fe92b998b45849ff11a547aadc3e8" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json index deece61..40f0122 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "6d68317966c44c48a0701ff661a5e655" + "x-dfo-trace-id": "74e9acc99aff40f7a653093976c55e3b" }, "json": { "schema_version": 1, @@ -44,14 +44,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "6d68317966c44c48a0701ff661a5e655", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "74e9acc99aff40f7a653093976c55e3b", "warnings": [], "timing_ms": { - "total": 4868, + "total": 4632, "by_step": { "coverage": 0, - "extract": 1143, + "extract": 1209, "cache_lookup": 0 } }, @@ -59,8 +59,8 @@ "input_tokens": 2237, "output_tokens": 215, "cached_tokens": 842, - "jev_input_tokens": 25205, - "jev_output_tokens": 5698 + "jev_input_tokens": 25612, + "jev_output_tokens": 5740 }, "timed_out": false }, @@ -69,30 +69,30 @@ { "warnings": [], "timing_ms": { - "total": 3437, + "total": 3118, "by_step": { - "recall": 538, + "recall": 753, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 85, + "shape_arcs": 75, "shape_probe_coverage": 3, - "shape_probe": 426, - "shape_groups": 43, + "shape_probe": 164, + "shape_groups": 44, "shape_labels": 9, - "shape_admission": 1, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1403, + "shape": 695, "phase_prune_and_rank": 0, - "bind": 228, - "phase_bind": 458, - "phase_settle": 103, - "phase_place_bindings": 23, + "bind": 275, + "phase_bind": 190, + "phase_settle": 91, + "phase_place_bindings": 19, "phase_facet_requests": 0, - "materialise": 385, - "phase_materialise": 1, - "answer": 18, - "options": 174, - "phase_outcome": 106 + "materialise": 616, + "phase_materialise": 0, + "answer": 20, + "options": 307, + "phase_outcome": 152 } }, "restatement": { @@ -110,6 +110,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -577,12 +591,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -597,6 +605,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -1422,7 +1436,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3750,30 +3764,30 @@ } ], "timing_ms": { - "total": 3091, + "total": 3017, "by_step": { - "recall": 450, - "phase_resolve_places": 0, + "recall": 704, + "phase_resolve_places": 1, "phase_check_entities": 0, - "shape_arcs": 93, + "shape_arcs": 82, "shape_probe_coverage": 2, - "shape_probe": 98, - "shape_groups": 44, - "shape_labels": 9, + "shape_probe": 99, + "shape_groups": 47, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 374, + "shape": 365, "phase_prune_and_rank": 0, - "bind": 223, - "phase_bind": 160, - "phase_settle": 51, - "phase_place_bindings": 27, + "bind": 402, + "phase_bind": 196, + "phase_settle": 88, + "phase_place_bindings": 44, "phase_facet_requests": 0, - "materialise": 1197, + "materialise": 512, "phase_materialise": 0, - "answer": 20, - "options": 455, - "phase_outcome": 134 + "answer": 58, + "options": 511, + "phase_outcome": 136 } }, "restatement": { @@ -3791,6 +3805,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -4258,12 +4286,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -4278,6 +4300,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -5103,7 +5131,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -7436,30 +7464,30 @@ } ], "timing_ms": { - "total": 707, + "total": 1849, "by_step": { - "recall": 3, + "recall": 391, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 146, - "shape_groups": 48, - "shape_labels": 9, + "shape_arcs": 4, + "shape_probe_coverage": 2, + "shape_probe": 126, + "shape_groups": 55, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 316, + "shape": 311, "phase_prune_and_rank": 0, - "bind": 143, - "phase_bind": 4, - "phase_settle": 16, - "phase_place_bindings": 7, + "bind": 139, + "phase_bind": 15, + "phase_settle": 27, + "phase_place_bindings": 426, "phase_facet_requests": 0, - "materialise": 98, - "phase_materialise": 1, - "answer": 6, - "options": 108, - "phase_outcome": 5 + "materialise": 93, + "phase_materialise": 0, + "answer": 244, + "options": 193, + "phase_outcome": 10 } }, "restatement": { @@ -7477,6 +7505,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -8882,7 +8924,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9415,7 +9457,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9996,7 +10038,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a13e0dc54c8e45028d75f8588accdaff" + "x-dfo-trace-id": "fc2f3ffbd0f448d2a6dcade27ac985bb" }, "json": { "schema_version": 1, @@ -14596,7 +14638,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:07.941117+00:00" + "confirmed_at": "2026-10-24T16:30:28.193872+00:00" }, "warnings": [], "diagnostics": [ @@ -14619,7 +14661,7 @@ "created_at": "2026-10-23T16:58:41.714148+00:00", "tier": "working", "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", @@ -14918,7 +14960,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:47.734809Z" @@ -14936,7 +14978,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted", - "x-dfo-trace-id": "98ab007ae74543b6ba88210aaea181bb" + "x-dfo-trace-id": "c0e0b1a4539f4af3b08693b51621e3cb" } } }, @@ -15029,7 +15071,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "0a0ec8988f20490a80444b30363ade09" + "x-dfo-trace-id": "8afa9ef2f2b54f89b6c8c836c84efd26" }, "json": { "schema_version": 1, @@ -15206,7 +15248,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:09.348368+00:00" + "confirmed_at": "2026-10-24T16:30:29.978390+00:00" }, "warnings": [], "diagnostics": [ @@ -15398,7 +15440,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:49.978519Z" @@ -15416,7 +15458,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", - "x-dfo-trace-id": "9bd6e2b9ac8b4778b2cd39f9aca71a71" + "x-dfo-trace-id": "af76c3e1b057409e8bbc7a9647e9aacc" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json index 87e46cc..70fb08f 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:00Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:20Z" }, "call": [ { @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b78bde3ba929452aab7d7cdd34bad909" + "x-dfo-trace-id": "5974af081db54d0babd26f8b1de79beb" }, "json": { "schema_version": 1, @@ -46,15 +46,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "b78bde3ba929452aab7d7cdd34bad909", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "5974af081db54d0babd26f8b1de79beb", "warnings": [], "timing_ms": { - "total": 377, + "total": 328, "by_step": { "coverage": 0, - "extract": 1, - "cache_lookup": 0 + "extract": 0, + "cache_lookup": 1 } }, "llm_usage": { @@ -72,30 +72,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 372, + "total": 323, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 2, - "shape_probe_coverage": 14, - "shape_probe": 14, + "shape_probe_coverage": 15, + "shape_probe": 16, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 128, + "shape": 104, "phase_prune_and_rank": 0, - "bind": 144, - "phase_bind": 10, + "bind": 101, + "phase_bind": 11, "phase_settle": 12, "phase_place_bindings": 11, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 1, + "answer": 2, "options": 7, - "phase_outcome": 49 + "phase_outcome": 65 } }, "restatement": { @@ -108,6 +108,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -562,7 +570,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1280,7 +1288,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3265,18 +3273,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 13, + "total": 15, "by_step": { - "recall": 0, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, "shape_probe": 4, - "shape_groups": 1, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 13, + "shape": 14, "phase_prune_and_rank": 0 } }, @@ -3290,6 +3298,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3714,7 +3723,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a0264860a3af4be098e96eefef69bf74" + "x-dfo-trace-id": "b8b4bbcd49e14cd49ecea658aea24ec5" }, "json": { "schema_version": 1, @@ -3954,7 +3963,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261012T000033Z-84777283", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:01.252594+00:00" + "confirmed_at": "2026-10-24T16:30:21.793459+00:00" }, "warnings": [ { @@ -3983,7 +3992,7 @@ "created_at": "2026-10-23T16:58:25.889079+00:00", "tier": "working", "url": "/api/datasets/spec_78d04fefc3b3f1ef71acd622957e4995/cv_2c981b422e8f8bdf5dee6067837cff13/files/sha256:ab0bfec276a23aaefea6dbc3f1b57854ea520b3a7ae5feeade202f292446ed2c", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:8da8a5b081cc06acba677ac2c668e4bcafb796bf040bede5de00740acda9c9ee", @@ -4175,7 +4184,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4192,7 +4201,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aab0bfec276a23aaefea6dbc3f1b57854ea520b3a7ae5feeade202f292446ed2c?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6d3da0693a134de395cfe22836258dd3" + "x-dfo-trace-id": "1ac27caa67d74511b31d6ca9016617df" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json index 3cbdd02..254d0f6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:36:58Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:18Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -45,14 +45,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -71,30 +71,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -107,6 +107,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -561,7 +569,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1279,7 +1287,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3264,18 +3272,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3289,6 +3297,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3644,7 +3653,7 @@ "error": { "class": "IncompleteAnswerError", "code": "answer_incomplete", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c" + "trace_id": "1e95940d311043d0b63bd27a87996439" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json index df7af53..7cd013e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "febf95d73157448f9ad342fe31a897d4" + "x-dfo-trace-id": "6c90259bc5dc43649740c2e47cb555bc" }, "json": { "schema_version": 1, @@ -45,8 +45,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "febf95d73157448f9ad342fe31a897d4", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6c90259bc5dc43649740c2e47cb555bc", "warnings": [], "timing_ms": { "total": 1, @@ -68,9 +68,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -117,6 +117,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -293,7 +303,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "9254a776588b49739881b71f3257f9b7" + "x-dfo-trace-id": "67793b9246794fc18d48484eb317d58f" }, "json": { "schema_version": 1, @@ -302,11 +312,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "9254a776588b49739881b71f3257f9b7", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "67793b9246794fc18d48484eb317d58f", "warnings": [], "timing_ms": { - "total": 1072, + "total": 932, "by_step": { "coverage": 0 } @@ -332,30 +342,30 @@ } ], "timing_ms": { - "total": 1070, + "total": 907, "by_step": { - "recall": 1, + "recall": 0, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 7, - "shape_probe": 131, - "shape_groups": 44, + "shape_probe_coverage": 6, + "shape_probe": 109, + "shape_groups": 41, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 524, + "shape": 387, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 177, - "phase_settle": 8, - "phase_place_bindings": 73, + "bind": 111, + "phase_bind": 175, + "phase_settle": 9, + "phase_place_bindings": 67, "phase_facet_requests": 0, "materialise": 15, "phase_materialise": 0, - "answer": 7, - "options": 6, - "phase_outcome": 155 + "answer": 10, + "options": 13, + "phase_outcome": 120 } }, "restatement": { @@ -376,6 +386,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Congo", + "refs": [ + "country/COD" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -745,7 +769,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1199,7 +1223,7 @@ "start_year": 2018, "end_year": 2018 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json index ad1f32e..a9a4400 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -44,21 +44,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -68,30 +70,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -109,6 +111,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": { "verb": "growth", "phrase": "growth of GDP", @@ -528,7 +544,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1181,7 +1197,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3779,7 +3795,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4180,7 +4196,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4209,7 +4225,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4508,7 +4524,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4525,7 +4541,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json index 64e0d4f..08f9ae8 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -41,14 +41,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -67,30 +67,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -103,6 +103,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -557,7 +565,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1275,7 +1283,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3260,18 +3268,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3285,6 +3293,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3622,7 +3631,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c" + "trace_id": "1e95940d311043d0b63bd27a87996439" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json index 427b029..93272d8 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:02Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:22Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "6d68317966c44c48a0701ff661a5e655" + "x-dfo-trace-id": "74e9acc99aff40f7a653093976c55e3b" }, "json": { "schema_version": 1, @@ -45,14 +45,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "6d68317966c44c48a0701ff661a5e655", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "74e9acc99aff40f7a653093976c55e3b", "warnings": [], "timing_ms": { - "total": 4868, + "total": 4632, "by_step": { "coverage": 0, - "extract": 1143, + "extract": 1209, "cache_lookup": 0 } }, @@ -60,8 +60,8 @@ "input_tokens": 2237, "output_tokens": 215, "cached_tokens": 842, - "jev_input_tokens": 25205, - "jev_output_tokens": 5698 + "jev_input_tokens": 25612, + "jev_output_tokens": 5740 }, "timed_out": false }, @@ -71,30 +71,30 @@ "variable_text": "health ODA disbursements", "warnings": [], "timing_ms": { - "total": 3437, + "total": 3118, "by_step": { - "recall": 538, + "recall": 753, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 85, + "shape_arcs": 75, "shape_probe_coverage": 3, - "shape_probe": 426, - "shape_groups": 43, + "shape_probe": 164, + "shape_groups": 44, "shape_labels": 9, - "shape_admission": 1, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1403, + "shape": 695, "phase_prune_and_rank": 0, - "bind": 228, - "phase_bind": 458, - "phase_settle": 103, - "phase_place_bindings": 23, + "bind": 275, + "phase_bind": 190, + "phase_settle": 91, + "phase_place_bindings": 19, "phase_facet_requests": 0, - "materialise": 385, - "phase_materialise": 1, - "answer": 18, - "options": 174, - "phase_outcome": 106 + "materialise": 616, + "phase_materialise": 0, + "answer": 20, + "options": 307, + "phase_outcome": 152 } }, "restatement": { @@ -112,6 +112,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -579,12 +593,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -599,6 +607,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -1424,7 +1438,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3752,30 +3766,30 @@ } ], "timing_ms": { - "total": 3091, + "total": 3017, "by_step": { - "recall": 450, - "phase_resolve_places": 0, + "recall": 704, + "phase_resolve_places": 1, "phase_check_entities": 0, - "shape_arcs": 93, + "shape_arcs": 82, "shape_probe_coverage": 2, - "shape_probe": 98, - "shape_groups": 44, - "shape_labels": 9, + "shape_probe": 99, + "shape_groups": 47, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 374, + "shape": 365, "phase_prune_and_rank": 0, - "bind": 223, - "phase_bind": 160, - "phase_settle": 51, - "phase_place_bindings": 27, + "bind": 402, + "phase_bind": 196, + "phase_settle": 88, + "phase_place_bindings": 44, "phase_facet_requests": 0, - "materialise": 1197, + "materialise": 512, "phase_materialise": 0, - "answer": 20, - "options": 455, - "phase_outcome": 134 + "answer": 58, + "options": 511, + "phase_outcome": 136 } }, "restatement": { @@ -3793,6 +3807,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -4260,12 +4288,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -4280,6 +4302,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -5105,7 +5133,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -7438,30 +7466,30 @@ } ], "timing_ms": { - "total": 707, + "total": 1849, "by_step": { - "recall": 3, + "recall": 391, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 146, - "shape_groups": 48, - "shape_labels": 9, + "shape_arcs": 4, + "shape_probe_coverage": 2, + "shape_probe": 126, + "shape_groups": 55, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 316, + "shape": 311, "phase_prune_and_rank": 0, - "bind": 143, - "phase_bind": 4, - "phase_settle": 16, - "phase_place_bindings": 7, + "bind": 139, + "phase_bind": 15, + "phase_settle": 27, + "phase_place_bindings": 426, "phase_facet_requests": 0, - "materialise": 98, - "phase_materialise": 1, - "answer": 6, - "options": 108, - "phase_outcome": 5 + "materialise": 93, + "phase_materialise": 0, + "answer": 244, + "options": 193, + "phase_outcome": 10 } }, "restatement": { @@ -7479,6 +7507,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -8884,7 +8926,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9417,7 +9459,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9998,7 +10040,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a13e0dc54c8e45028d75f8588accdaff" + "x-dfo-trace-id": "fc2f3ffbd0f448d2a6dcade27ac985bb" }, "json": { "schema_version": 1, @@ -14598,7 +14640,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:07.941117+00:00" + "confirmed_at": "2026-10-24T16:30:28.193872+00:00" }, "warnings": [], "diagnostics": [ @@ -14621,7 +14663,7 @@ "created_at": "2026-10-23T16:58:41.714148+00:00", "tier": "working", "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", @@ -14920,7 +14962,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:47.734809Z" @@ -14938,7 +14980,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted", - "x-dfo-trace-id": "98ab007ae74543b6ba88210aaea181bb" + "x-dfo-trace-id": "c0e0b1a4539f4af3b08693b51621e3cb" } } }, @@ -15031,7 +15073,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "0a0ec8988f20490a80444b30363ade09" + "x-dfo-trace-id": "8afa9ef2f2b54f89b6c8c836c84efd26" }, "json": { "schema_version": 1, @@ -15208,7 +15250,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:09.348368+00:00" + "confirmed_at": "2026-10-24T16:30:29.978390+00:00" }, "warnings": [], "diagnostics": [ @@ -15400,7 +15442,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:49.978519Z" @@ -15418,7 +15460,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", - "x-dfo-trace-id": "9bd6e2b9ac8b4778b2cd39f9aca71a71" + "x-dfo-trace-id": "af76c3e1b057409e8bbc7a9647e9aacc" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json index 9bbb96b..ddf62a5 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -41,21 +41,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -65,30 +67,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -106,6 +108,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -458,7 +474,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1111,7 +1127,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3628,7 +3644,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d" + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json index b661d6f..67702d7 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -41,21 +41,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -65,30 +67,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -106,6 +108,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -408,7 +424,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d" + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json index f4f913b..54b6e48 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json @@ -44,14 +44,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -70,30 +70,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -106,6 +106,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -560,7 +568,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1278,7 +1286,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3263,18 +3271,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3288,6 +3296,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json index fca486e..d55e0ec 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -41,15 +41,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -65,9 +65,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -114,6 +114,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json index 4a04035..bf2b909 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -41,15 +41,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -65,9 +65,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -114,6 +114,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -247,7 +257,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "a321fb82bfba461b9dc922634789650f" + "trace_id": "304fe92b998b45849ff11a547aadc3e8" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json index d0ba462..1ca39fd 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -44,14 +44,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -70,30 +70,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -106,6 +106,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -560,7 +568,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1278,7 +1286,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3263,18 +3271,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3288,6 +3296,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3643,7 +3652,7 @@ "error": { "class": "IncompleteAnswerError", "code": "answer_incomplete", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c" + "trace_id": "1e95940d311043d0b63bd27a87996439" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json index ea402dc..3471fd6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -44,14 +44,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -70,30 +70,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -106,6 +106,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -560,7 +568,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1278,7 +1286,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3263,18 +3271,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3288,6 +3296,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3637,7 +3646,7 @@ "error": { "class": "IncompleteAnswerError", "code": "answer_incomplete", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c" + "trace_id": "1e95940d311043d0b63bd27a87996439" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json index 370fea6..d4a4d89 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -71,28 +71,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -284,6 +284,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -806,7 +814,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2340,7 +2348,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2639,7 +2647,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8122d1bf0e034c8b833ac2f202e2a9c0" + "x-dfo-trace-id": "bb50ec0b45244567bf259cee9e6de857" }, "json": { "schema_version": 1, @@ -2648,11 +2656,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8122d1bf0e034c8b833ac2f202e2a9c0", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bb50ec0b45244567bf259cee9e6de857", "warnings": [], "timing_ms": { - "total": 637, + "total": 486, "by_step": { "coverage": 0 } @@ -2665,21 +2673,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 590, + "total": 436, "by_step": { - "validate": 0, - "walk": 215, + "validate": 1, + "walk": 182, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 257, - "bind": 0, + "shape": 158, + "bind": 1, "where_places": 0, - "materialise": 116, + "materialise": 93, "answer": 1, - "options": 1 + "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [ @@ -3204,7 +3213,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json index 15fafc5..6219a29 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -71,28 +71,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -284,6 +284,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -806,7 +814,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2340,7 +2348,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2621,7 +2629,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8122d1bf0e034c8b833ac2f202e2a9c0" + "x-dfo-trace-id": "bb50ec0b45244567bf259cee9e6de857" }, "json": { "schema_version": 1, @@ -2630,11 +2638,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8122d1bf0e034c8b833ac2f202e2a9c0", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bb50ec0b45244567bf259cee9e6de857", "warnings": [], "timing_ms": { - "total": 637, + "total": 486, "by_step": { "coverage": 0 } @@ -2647,21 +2655,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 590, + "total": 436, "by_step": { - "validate": 0, - "walk": 215, + "validate": 1, + "walk": 182, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 257, - "bind": 0, + "shape": 158, + "bind": 1, "where_places": 0, - "materialise": 116, + "materialise": 93, "answer": 1, - "options": 1 + "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3177,7 +3186,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json index eb1315d..c0a28da 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:43Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:32:01Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "25c71c81e1ca452e8b685116e6be540e" + "x-dfo-trace-id": "fef53a976b3e4e1cb64f3bc36f96f076" }, "json": { "schema_version": 1, @@ -47,14 +47,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "25c71c81e1ca452e8b685116e6be540e", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "fef53a976b3e4e1cb64f3bc36f96f076", "warnings": [], "timing_ms": { - "total": 3941, + "total": 3026, "by_step": { "coverage": 0, - "extract": 1292, + "extract": 1213, "cache_lookup": 0 } }, @@ -79,28 +79,28 @@ } ], "timing_ms": { - "total": 2646, + "total": 1634, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 106, + "shape_arcs": 3, + "shape_probe": 138, "shape_groups": 5, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 250, + "shape": 249, "phase_prune_and_rank": 0, - "bind": 805, - "phase_bind": 4, - "phase_settle": 8, - "phase_place_bindings": 110, + "bind": 135, + "phase_bind": 11, + "phase_settle": 7, + "phase_place_bindings": 28, "phase_facet_requests": 0, - "materialise": 167, + "materialise": 116, "phase_materialise": 0, - "answer": 26, - "phase_outcome": 1275 + "answer": 57, + "phase_outcome": 1030 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", @@ -307,6 +307,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -836,7 +844,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2370,7 +2378,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2406,30 +2414,30 @@ } ], "timing_ms": { - "total": 1430, + "total": 1809, "by_step": { - "recall": 0, + "recall": 452, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 111, - "shape_groups": 50, + "shape_probe_coverage": 10, + "shape_probe": 142, + "shape_groups": 40, "shape_labels": 0, - "shape_admission": 1, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 565, + "shape": 666, "phase_prune_and_rank": 0, - "bind": 135, - "phase_bind": 368, - "phase_settle": 11, - "phase_place_bindings": 91, + "bind": 129, + "phase_bind": 297, + "phase_settle": 13, + "phase_place_bindings": 76, "phase_facet_requests": 0, - "materialise": 38, + "materialise": 16, "phase_materialise": 0, - "answer": 25, - "options": 7, - "phase_outcome": 190 + "answer": 8, + "options": 33, + "phase_outcome": 119 } }, "restatement": { @@ -2444,6 +2452,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -2455,7 +2471,7 @@ { "code": "whole_total_read", "binding_ref": "origin:", - "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']." + "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question." } ], "assumptions": [ @@ -2848,7 +2864,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -3296,7 +3312,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -5419,7 +5435,7 @@ } } ], - "rendered_sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']. Assumed: official development assistance.", + "rendered_sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question. Assumed: official development assistance.", "sentence_plan": [ { "kind": "text", @@ -5882,7 +5898,7 @@ }, { "kind": "text", - "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor'].", + "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question.", "segment": "departure", "entity_refs": [], "states": [], @@ -6057,7 +6073,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bdcd09adc5d149ef9430710a445cb8ca" + "x-dfo-trace-id": "6255e04219bd4208bca0a6f26fbe89b2" }, "json": { "schema_version": 1, @@ -6066,11 +6082,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "bdcd09adc5d149ef9430710a445cb8ca", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6255e04219bd4208bca0a6f26fbe89b2", "warnings": [], "timing_ms": { - "total": 1780, + "total": 1746, "by_step": { "coverage": 0 } @@ -6083,21 +6099,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 303, + "total": 262, "by_step": { - "validate": 1, + "validate": 0, "walk": 0, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 209, + "shape": 169, "bind": 0, "where_places": 0, - "materialise": 92, + "materialise": 91, "answer": 1, "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -6613,7 +6630,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -6662,21 +6679,22 @@ "variable_text": "aid flows", "warnings": [], "timing_ms": { - "total": 1732, + "total": 1695, "by_step": { "validate": 0, "walk": 10, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 1699, + "shape": 1660, "bind": 0, "where_places": 0, - "materialise": 14, + "materialise": 15, "answer": 7, "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -7074,7 +7092,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -7522,7 +7540,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -10018,7 +10036,7 @@ "answer": { "kind": "resolution", "status": "mixed", - "sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']. Assumed: official development assistance.", + "sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question. Assumed: official development assistance.", "complete": false, "specs": [ "spec_f24e46ae9854884308fc0f33d154361e" diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json index 7bbd5e0..cbcd88d 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:21Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:37Z" }, "call": [ { @@ -39,7 +39,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "fac5b4aa15d145e6b20db91a1cd7a24b" + "x-dfo-trace-id": "542dac0d7c43477cb66c1841c20e169d" }, "json": { "schema_version": 1, @@ -50,14 +50,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "fac5b4aa15d145e6b20db91a1cd7a24b", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "542dac0d7c43477cb66c1841c20e169d", "warnings": [], "timing_ms": { - "total": 9120, + "total": 8962, "by_step": { "coverage": 0, - "extract": 979, + "extract": 1389, "cache_lookup": 0 } }, @@ -65,8 +65,8 @@ "input_tokens": 2245, "output_tokens": 202, "cached_tokens": 844, - "jev_input_tokens": 26433, - "jev_output_tokens": 5561 + "jev_input_tokens": 26840, + "jev_output_tokens": 5603 }, "timed_out": false }, @@ -76,28 +76,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 8137, + "total": 7499, "by_step": { - "recall": 0, - "phase_resolve_places": 1, + "recall": 1, + "phase_resolve_places": 83, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe": 102, + "shape_arcs": 4, + "shape_probe": 98, "shape_groups": 5, "shape_labels": 1, - "shape_admission": 1, + "shape_admission": 75, "phase_derive_shapes": 0, - "shape": 362, + "shape": 417, "phase_prune_and_rank": 0, - "bind": 146, - "phase_bind": 4, - "phase_settle": 11, - "phase_place_bindings": 27, + "bind": 125, + "phase_bind": 17, + "phase_settle": 7, + "phase_place_bindings": 23, "phase_facet_requests": 0, - "materialise": 896, + "materialise": 285, "phase_materialise": 0, - "answer": 45, - "phase_outcome": 6645 + "answer": 46, + "phase_outcome": 6495 } }, "rendered_sentence": "3 readings. Deaths rate per capita in the 48 countries in Sub-Saharan Africa. World Development Indicators · 2013 to 2022. Number of deaths in the 48 countries in Sub-Saharan Africa. Kenya Census · 2018 to 2022. Count of mortality event (as fraction of count birth event live birth) in the 48 countries in Sub-Saharan Africa. Nigeria Statistics · 2014.", @@ -348,6 +348,68 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + }, + { + "text": "Sub-Saharan Africa", + "refs": [ + "SubSaharanAfrica", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -1915,7 +1977,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -4485,7 +4547,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -6074,7 +6136,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -6100,30 +6162,30 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1889, + "total": 1683, "by_step": { - "recall": 1, - "phase_resolve_places": 0, + "recall": 0, + "phase_resolve_places": 103, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe_coverage": 8, - "shape_probe": 10, - "shape_groups": 46, + "shape_arcs": 3, + "shape_probe_coverage": 3, + "shape_probe": 5, + "shape_groups": 48, "shape_labels": 10, - "shape_admission": 1, + "shape_admission": 112, "phase_derive_shapes": 0, - "shape": 327, + "shape": 447, "phase_prune_and_rank": 0, - "bind": 843, - "phase_bind": 4, - "phase_settle": 16, + "bind": 143, + "phase_bind": 12, + "phase_settle": 36, "phase_place_bindings": 7, "phase_facet_requests": 0, - "materialise": 377, + "materialise": 337, "phase_materialise": 0, - "answer": 32, - "options": 146, - "phase_outcome": 136 + "answer": 33, + "options": 426, + "phase_outcome": 139 } }, "restatement": { @@ -6140,6 +6202,68 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + }, + { + "text": "Sub-Saharan Africa", + "refs": [ + "SubSaharanAfrica", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + } + ], "operations": [], "departures": [ { @@ -8563,7 +8687,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -10132,7 +10256,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -10887,7 +11011,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a307928119964968b55057dbf481949e" + "x-dfo-trace-id": "fed0402857db4d198957a2377d91a266" }, "json": { "schema_version": 1, @@ -10896,11 +11020,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a307928119964968b55057dbf481949e", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "fed0402857db4d198957a2377d91a266", "warnings": [], "timing_ms": { - "total": 1587, + "total": 1060, "by_step": { "coverage": 0 } @@ -10913,21 +11037,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1115, + "total": 548, "by_step": { "validate": 1, "walk": 0, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 192, + "shape": 157, "bind": 0, - "where_places": 1, - "materialise": 780, - "answer": 17, - "options": 124 + "where_places": 0, + "materialise": 256, + "answer": 8, + "options": 126 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -12494,7 +12619,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -12508,21 +12633,22 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1463, + "total": 937, "by_step": { "validate": 0, "walk": 0, - "reread_arcs": 1, + "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 980, + "shape": 657, "bind": 0, - "where_places": 0, - "materialise": 197, - "answer": 8, - "options": 277 + "where_places": 1, + "materialise": 181, + "answer": 7, + "options": 91 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -14651,7 +14777,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -15091,7 +15217,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "56077c07b2ac447282af326922be9262" + "x-dfo-trace-id": "4afea2b786664a9fa9659b020e0016d6" }, "json": { "schema_version": 1, @@ -15352,7 +15478,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "head", - "confirmed_at": "2026-10-23T18:39:33.191814+00:00" + "confirmed_at": "2026-10-24T16:31:48.627461+00:00" }, "warnings": [], "diagnostics": [ @@ -15550,7 +15676,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-22T17:40:52.293692Z" @@ -15568,7 +15694,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A0652c59a04403a740ed0a4a75360cc04900bbcce57dfc4d7f7b7d2b21a9404dd?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cd6b8ede11cf4b3cbf3b5aef915f8d14" + "x-dfo-trace-id": "4035ed942dbd417b883890979c32af7b" } } }, @@ -15709,7 +15835,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "42d04700ff8e49ab9a21a3f778594017" + "x-dfo-trace-id": "0dd46708d45b47a39b91408cc8700637" }, "json": { "schema_version": 1, @@ -15934,7 +16060,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "head", - "confirmed_at": "2026-10-23T18:39:34.359134+00:00" + "confirmed_at": "2026-10-24T16:31:49.948810+00:00" }, "warnings": [ { @@ -16138,7 +16264,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-22T17:40:54.208730Z" @@ -16156,7 +16282,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A18a2e84a4829808841c3967941a92c555ac6c8c30856fe2113ba38d89e121cf7?X-Goog-Signature=redacted", - "x-dfo-trace-id": "8c9d245aa46c4b6e89b1cf2c79657eb3" + "x-dfo-trace-id": "7646f48ce8414ae8aefdf014523b025c" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json index 2e5100d..8e13000 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "25c71c81e1ca452e8b685116e6be540e" + "x-dfo-trace-id": "fef53a976b3e4e1cb64f3bc36f96f076" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "25c71c81e1ca452e8b685116e6be540e", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "fef53a976b3e4e1cb64f3bc36f96f076", "warnings": [], "timing_ms": { - "total": 3941, + "total": 3026, "by_step": { "coverage": 0, - "extract": 1292, + "extract": 1213, "cache_lookup": 0 } }, @@ -78,28 +78,28 @@ } ], "timing_ms": { - "total": 2646, + "total": 1634, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 106, + "shape_arcs": 3, + "shape_probe": 138, "shape_groups": 5, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 250, + "shape": 249, "phase_prune_and_rank": 0, - "bind": 805, - "phase_bind": 4, - "phase_settle": 8, - "phase_place_bindings": 110, + "bind": 135, + "phase_bind": 11, + "phase_settle": 7, + "phase_place_bindings": 28, "phase_facet_requests": 0, - "materialise": 167, + "materialise": 116, "phase_materialise": 0, - "answer": 26, - "phase_outcome": 1275 + "answer": 57, + "phase_outcome": 1030 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", @@ -306,6 +306,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -835,7 +843,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2369,7 +2377,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2412,30 +2420,30 @@ } ], "timing_ms": { - "total": 1430, + "total": 1809, "by_step": { - "recall": 0, + "recall": 452, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 111, - "shape_groups": 50, + "shape_probe_coverage": 10, + "shape_probe": 142, + "shape_groups": 40, "shape_labels": 0, - "shape_admission": 1, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 565, + "shape": 666, "phase_prune_and_rank": 0, - "bind": 135, - "phase_bind": 368, - "phase_settle": 11, - "phase_place_bindings": 91, + "bind": 129, + "phase_bind": 297, + "phase_settle": 13, + "phase_place_bindings": 76, "phase_facet_requests": 0, - "materialise": 38, + "materialise": 16, "phase_materialise": 0, - "answer": 25, - "options": 7, - "phase_outcome": 190 + "answer": 8, + "options": 33, + "phase_outcome": 119 } }, "restatement": { @@ -2450,6 +2458,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [ 42, { @@ -2478,7 +2494,7 @@ { "code": "whole_total_read", "binding_ref": "origin:", - "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']." + "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question." } ], "assumptions": [ @@ -2887,7 +2903,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -3335,7 +3351,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -5458,7 +5474,7 @@ } } ], - "rendered_sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']. Assumed: official development assistance.", + "rendered_sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question. Assumed: official development assistance.", "sentence_plan": [ { "kind": "text", @@ -5921,7 +5937,7 @@ }, { "kind": "text", - "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor'].", + "text": "No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question.", "segment": "departure", "entity_refs": [], "states": [], @@ -6115,7 +6131,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bdcd09adc5d149ef9430710a445cb8ca" + "x-dfo-trace-id": "6255e04219bd4208bca0a6f26fbe89b2" }, "json": { "schema_version": 1, @@ -6124,11 +6140,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "bdcd09adc5d149ef9430710a445cb8ca", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6255e04219bd4208bca0a6f26fbe89b2", "warnings": [], "timing_ms": { - "total": 1780, + "total": 1746, "by_step": { "coverage": 0 } @@ -6141,21 +6157,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 303, + "total": 262, "by_step": { - "validate": 1, + "validate": 0, "walk": 0, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 209, + "shape": 169, "bind": 0, "where_places": 0, - "materialise": 92, + "materialise": 91, "answer": 1, "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -6671,7 +6688,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -6720,21 +6737,22 @@ "variable_text": "aid flows", "warnings": [], "timing_ms": { - "total": 1732, + "total": 1695, "by_step": { "validate": 0, "walk": 10, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 1699, + "shape": 1660, "bind": 0, "where_places": 0, - "materialise": 14, + "materialise": 15, "answer": 7, "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -7132,7 +7150,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -7580,7 +7598,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -10076,7 +10094,7 @@ "answer": { "kind": "resolution", "status": "mixed", - "sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, search again with open_roles ['donor']. Assumed: official development assistance.", + "sentence": "Answered 1 of 2 parts. Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Gross disbursements to Kenya from official donors (DAC) for official development assistance, 2013 to 2022. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. No donor was named, so this shows official donors (DAC), the source's total for every official donor. Private donors are outside it. To list each donor, add \"for each donor\" to the question. Assumed: official development assistance.", "complete": false, "specs": [ "spec_f24e46ae9854884308fc0f33d154361e" diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json index b91bae3..0799c24 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4b32dbe3eadc46e5b1815c1408980fef" + "x-dfo-trace-id": "009afd1dc09e44299c2004e111d17991" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4b32dbe3eadc46e5b1815c1408980fef", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "009afd1dc09e44299c2004e111d17991", "warnings": [], "timing_ms": { - "total": 2102, + "total": 2627, "by_step": { "coverage": 0, - "extract": 990, + "extract": 1263, "cache_lookup": 0 } }, @@ -61,8 +61,8 @@ "input_tokens": 2239, "output_tokens": 164, "cached_tokens": 842, - "jev_input_tokens": 16995, - "jev_output_tokens": 3458 + "jev_input_tokens": 17402, + "jev_output_tokens": 3500 }, "timed_out": false }, @@ -72,30 +72,30 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1107, + "total": 1129, "by_step": { "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 103, + "shape_arcs": 4, + "shape_probe_coverage": 4, + "shape_probe": 151, "shape_groups": 45, "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 439, + "shape": 407, "phase_prune_and_rank": 0, - "bind": 149, - "phase_bind": 7, - "phase_settle": 14, + "bind": 127, + "phase_bind": 10, + "phase_settle": 24, "phase_place_bindings": 8, "phase_facet_requests": 0, - "materialise": 135, + "materialise": 144, "phase_materialise": 0, - "answer": 33, - "options": 161, - "phase_outcome": 159 + "answer": 185, + "options": 98, + "phase_outcome": 124 } }, "restatement": { @@ -115,6 +115,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [ { "verb": "growth", @@ -1926,7 +1965,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2845,7 +2884,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2949,24 +2988,24 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 828, + "total": 619, "by_step": { - "recall": 417, + "recall": 315, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, + "shape_arcs": 1, "shape_probe_coverage": 5, - "shape_probe": 213, - "shape_groups": 2, + "shape_probe": 107, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 298, + "shape": 196, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 1, - "phase_settle": 7, - "phase_place_bindings": 1 + "bind": 97, + "phase_bind": 2, + "phase_settle": 9, + "phase_place_bindings": 0 } }, "rendered_sentence": "Could not tell who is giving and who is receiving among \"G20\", \"Germany\", and \"India\". Put \"from\" or \"to\" before a name.", @@ -2979,6 +3018,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3535,7 +3575,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "d9e0eb5cd99248bc851045e80fcfef32" + "x-dfo-trace-id": "6a837108e9cb4b74b197a33c82a6e92f" }, "json": { "schema_version": 1, @@ -3544,11 +3584,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "d9e0eb5cd99248bc851045e80fcfef32", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6a837108e9cb4b74b197a33c82a6e92f", "warnings": [], "timing_ms": { - "total": 960, + "total": 953, "by_step": { "coverage": 0 } @@ -3568,21 +3608,22 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 841, + "total": 847, "by_step": { "validate": 0, "walk": 1, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 599, + "shape": 638, "bind": 0, "where_places": 0, - "materialise": 132, - "answer": 3, - "options": 106 + "materialise": 110, + "answer": 4, + "options": 94 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -5094,7 +5135,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -5169,30 +5210,30 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 390, + "total": 339, "by_step": { - "recall": 2, - "phase_resolve_places": 0, + "recall": 1, + "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 5, - "shape_probe": 106, - "shape_groups": 2, + "shape_probe_coverage": 6, + "shape_probe": 95, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 198, + "shape": 169, "phase_prune_and_rank": 0, - "bind": 88, + "bind": 84, "phase_bind": 9, "phase_settle": 8, "phase_place_bindings": 1, "phase_facet_requests": 0, - "materialise": 18, + "materialise": 17, "phase_materialise": 0, - "answer": 10, + "answer": 9, "options": 6, - "phase_outcome": 50 + "phase_outcome": 34 } }, "restatement": { @@ -5215,6 +5256,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -5729,7 +5809,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -6267,7 +6347,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json index 78c3836..45ca40c 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:39Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:56Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4b32dbe3eadc46e5b1815c1408980fef" + "x-dfo-trace-id": "009afd1dc09e44299c2004e111d17991" }, "json": { "schema_version": 1, @@ -47,14 +47,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4b32dbe3eadc46e5b1815c1408980fef", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "009afd1dc09e44299c2004e111d17991", "warnings": [], "timing_ms": { - "total": 2102, + "total": 2627, "by_step": { "coverage": 0, - "extract": 990, + "extract": 1263, "cache_lookup": 0 } }, @@ -62,8 +62,8 @@ "input_tokens": 2239, "output_tokens": 164, "cached_tokens": 842, - "jev_input_tokens": 16995, - "jev_output_tokens": 3458 + "jev_input_tokens": 17402, + "jev_output_tokens": 3500 }, "timed_out": false }, @@ -73,30 +73,30 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1107, + "total": 1129, "by_step": { "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 103, + "shape_arcs": 4, + "shape_probe_coverage": 4, + "shape_probe": 151, "shape_groups": 45, "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 439, + "shape": 407, "phase_prune_and_rank": 0, - "bind": 149, - "phase_bind": 7, - "phase_settle": 14, + "bind": 127, + "phase_bind": 10, + "phase_settle": 24, "phase_place_bindings": 8, "phase_facet_requests": 0, - "materialise": 135, + "materialise": 144, "phase_materialise": 0, - "answer": 33, - "options": 161, - "phase_outcome": 159 + "answer": 185, + "options": 98, + "phase_outcome": 124 } }, "restatement": { @@ -116,6 +116,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -1921,7 +1960,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2840,7 +2879,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2943,24 +2982,24 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 828, + "total": 619, "by_step": { - "recall": 417, + "recall": 315, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, + "shape_arcs": 1, "shape_probe_coverage": 5, - "shape_probe": 213, - "shape_groups": 2, + "shape_probe": 107, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 298, + "shape": 196, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 1, - "phase_settle": 7, - "phase_place_bindings": 1 + "bind": 97, + "phase_bind": 2, + "phase_settle": 9, + "phase_place_bindings": 0 } }, "rendered_sentence": "Could not tell who is giving and who is receiving among \"G20\", \"Germany\", and \"India\". Put \"from\" or \"to\" before a name.", @@ -2973,6 +3012,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3521,7 +3561,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "d9e0eb5cd99248bc851045e80fcfef32" + "x-dfo-trace-id": "6a837108e9cb4b74b197a33c82a6e92f" }, "json": { "schema_version": 1, @@ -3530,11 +3570,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "d9e0eb5cd99248bc851045e80fcfef32", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6a837108e9cb4b74b197a33c82a6e92f", "warnings": [], "timing_ms": { - "total": 960, + "total": 953, "by_step": { "coverage": 0 } @@ -3554,21 +3594,22 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 841, + "total": 847, "by_step": { "validate": 0, "walk": 1, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 599, + "shape": 638, "bind": 0, "where_places": 0, - "materialise": 132, - "answer": 3, - "options": 106 + "materialise": 110, + "answer": 4, + "options": 94 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -5080,7 +5121,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -5155,30 +5196,30 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 390, + "total": 339, "by_step": { - "recall": 2, - "phase_resolve_places": 0, + "recall": 1, + "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 5, - "shape_probe": 106, - "shape_groups": 2, + "shape_probe_coverage": 6, + "shape_probe": 95, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 198, + "shape": 169, "phase_prune_and_rank": 0, - "bind": 88, + "bind": 84, "phase_bind": 9, "phase_settle": 8, "phase_place_bindings": 1, "phase_facet_requests": 0, - "materialise": 18, + "materialise": 17, "phase_materialise": 0, - "answer": 10, + "answer": 9, "options": 6, - "phase_outcome": 50 + "phase_outcome": 34 } }, "restatement": { @@ -5201,6 +5242,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -5715,7 +5795,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -6253,7 +6333,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json index 3df58c7..61d4757 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "febf95d73157448f9ad342fe31a897d4" + "x-dfo-trace-id": "6c90259bc5dc43649740c2e47cb555bc" }, "json": { "schema_version": 1, @@ -45,8 +45,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "febf95d73157448f9ad342fe31a897d4", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6c90259bc5dc43649740c2e47cb555bc", "warnings": [], "timing_ms": { "total": 1, @@ -68,9 +68,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -117,6 +117,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -284,7 +294,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "febf95d73157448f9ad342fe31a897d4" + "trace_id": "6c90259bc5dc43649740c2e47cb555bc" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json index 0862a4e..f2c90c7 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "febf95d73157448f9ad342fe31a897d4" + "x-dfo-trace-id": "6c90259bc5dc43649740c2e47cb555bc" }, "json": { "schema_version": 1, @@ -45,8 +45,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "febf95d73157448f9ad342fe31a897d4", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6c90259bc5dc43649740c2e47cb555bc", "warnings": [], "timing_ms": { "total": 1, @@ -68,9 +68,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -117,6 +117,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -243,7 +253,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "febf95d73157448f9ad342fe31a897d4" + "trace_id": "6c90259bc5dc43649740c2e47cb555bc" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json index b62c0fd..926c0bb 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:15Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:31Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "7c9c9bea4a59447ba7b6412c645456e1" + "x-dfo-trace-id": "79f55e76540244d18a4543d497614a89" }, "json": { "schema_version": 1, @@ -47,8 +47,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "7c9c9bea4a59447ba7b6412c645456e1", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "79f55e76540244d18a4543d497614a89", "warnings": [], "timing_ms": { "total": 1, @@ -70,9 +70,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -119,6 +119,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -281,7 +291,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "3fe50c68d204497f8418531c936b8a81" + "x-dfo-trace-id": "0a622ff00fe449c19cedbae4fd61f52b" }, "json": { "schema_version": 1, @@ -290,14 +300,14 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "3fe50c68d204497f8418531c936b8a81", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "0a622ff00fe449c19cedbae4fd61f52b", "warnings": [], "timing_ms": { - "total": 2, + "total": 3, "by_step": { "coverage": 0, - "response_cache_layer2": 0 + "response_cache_layer2": 1 } }, "llm_usage": { @@ -319,30 +329,30 @@ } ], "timing_ms": { - "total": 1070, + "total": 907, "by_step": { - "recall": 1, + "recall": 0, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 7, - "shape_probe": 131, - "shape_groups": 44, + "shape_probe_coverage": 6, + "shape_probe": 109, + "shape_groups": 41, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 524, + "shape": 387, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 177, - "phase_settle": 8, - "phase_place_bindings": 73, + "bind": 111, + "phase_bind": 175, + "phase_settle": 9, + "phase_place_bindings": 67, "phase_facet_requests": 0, "materialise": 15, "phase_materialise": 0, - "answer": 7, - "options": 6, - "phase_outcome": 155 + "answer": 10, + "options": 13, + "phase_outcome": 120 } }, "restatement": { @@ -363,6 +373,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Congo", + "refs": [ + "country/COD" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -732,7 +756,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1186,7 +1210,7 @@ "start_year": 2018, "end_year": 2018 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json index 534b76f..81ed866 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:14Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:30Z" }, "call": [ { @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "febf95d73157448f9ad342fe31a897d4" + "x-dfo-trace-id": "6c90259bc5dc43649740c2e47cb555bc" }, "json": { "schema_version": 1, @@ -46,8 +46,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "febf95d73157448f9ad342fe31a897d4", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6c90259bc5dc43649740c2e47cb555bc", "warnings": [], "timing_ms": { "total": 1, @@ -69,9 +69,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -118,6 +118,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -280,7 +290,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "9254a776588b49739881b71f3257f9b7" + "x-dfo-trace-id": "67793b9246794fc18d48484eb317d58f" }, "json": { "schema_version": 1, @@ -289,11 +299,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "9254a776588b49739881b71f3257f9b7", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "67793b9246794fc18d48484eb317d58f", "warnings": [], "timing_ms": { - "total": 1072, + "total": 932, "by_step": { "coverage": 0 } @@ -319,30 +329,30 @@ } ], "timing_ms": { - "total": 1070, + "total": 907, "by_step": { - "recall": 1, + "recall": 0, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 7, - "shape_probe": 131, - "shape_groups": 44, + "shape_probe_coverage": 6, + "shape_probe": 109, + "shape_groups": 41, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 524, + "shape": 387, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 177, - "phase_settle": 8, - "phase_place_bindings": 73, + "bind": 111, + "phase_bind": 175, + "phase_settle": 9, + "phase_place_bindings": 67, "phase_facet_requests": 0, "materialise": 15, "phase_materialise": 0, - "answer": 7, - "options": 6, - "phase_outcome": 155 + "answer": 10, + "options": 13, + "phase_outcome": 120 } }, "restatement": { @@ -363,6 +373,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Congo", + "refs": [ + "country/COD" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -732,7 +756,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1186,7 +1210,7 @@ "start_year": 2018, "end_year": 2018 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json index ffb88fc..4ba7c6a 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:16Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:32Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "54bfcfb9a52b47bab15cedbc04e2cb8e" + "x-dfo-trace-id": "a49188b7f477461e9942a92b389f8671" }, "json": { "schema_version": 1, @@ -47,8 +47,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "54bfcfb9a52b47bab15cedbc04e2cb8e", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "a49188b7f477461e9942a92b389f8671", "warnings": [], "timing_ms": { "total": 1, @@ -122,6 +122,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -227,9 +241,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 2, + "total": 1, "by_step": { - "recall": 2, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -279,6 +293,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -475,7 +503,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c58a661a7d274384aa44d978ba85987e" + "x-dfo-trace-id": "e4482a207d27410a9a03cb6f915ae3df" }, "json": { "schema_version": 1, @@ -484,11 +512,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "c58a661a7d274384aa44d978ba85987e", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "e4482a207d27410a9a03cb6f915ae3df", "warnings": [], "timing_ms": { - "total": 1053, + "total": 984, "by_step": { "coverage": 0 } @@ -566,6 +594,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -682,30 +724,30 @@ } ], "timing_ms": { - "total": 1049, + "total": 980, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, "shape_probe_coverage": 6, - "shape_probe": 113, - "shape_groups": 53, + "shape_probe": 84, + "shape_groups": 40, "shape_labels": 1, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 455, + "shape": 402, "phase_prune_and_rank": 0, - "bind": 139, - "phase_bind": 226, + "bind": 106, + "phase_bind": 230, "phase_settle": 9, - "phase_place_bindings": 68, + "phase_place_bindings": 83, "phase_facet_requests": 0, "materialise": 13, "phase_materialise": 0, - "answer": 8, - "options": 5, - "phase_outcome": 125 + "answer": 7, + "options": 6, + "phase_outcome": 123 } }, "restatement": { @@ -730,6 +772,26 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Congo", + "refs": [ + "country/COD" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -1098,7 +1160,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1571,7 +1633,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json index 81096f5..0c8ad89 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4b32dbe3eadc46e5b1815c1408980fef" + "x-dfo-trace-id": "009afd1dc09e44299c2004e111d17991" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4b32dbe3eadc46e5b1815c1408980fef", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "009afd1dc09e44299c2004e111d17991", "warnings": [], "timing_ms": { - "total": 2102, + "total": 2627, "by_step": { "coverage": 0, - "extract": 990, + "extract": 1263, "cache_lookup": 0 } }, @@ -61,8 +61,8 @@ "input_tokens": 2239, "output_tokens": 164, "cached_tokens": 842, - "jev_input_tokens": 16995, - "jev_output_tokens": 3458 + "jev_input_tokens": 17402, + "jev_output_tokens": 3500 }, "timed_out": false }, @@ -72,32 +72,71 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1107, + "total": 1129, "by_step": { "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 103, + "shape_arcs": 4, + "shape_probe_coverage": 4, + "shape_probe": 151, "shape_groups": 45, "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 439, + "shape": 407, "phase_prune_and_rank": 0, - "bind": 149, - "phase_bind": 7, - "phase_settle": 14, + "bind": 127, + "phase_bind": 10, + "phase_settle": 24, "phase_place_bindings": 8, "phase_facet_requests": 0, - "materialise": 135, + "materialise": 144, "phase_materialise": 0, - "answer": 33, - "options": 161, - "phase_outcome": 159 + "answer": 185, + "options": 98, + "phase_outcome": 124 } }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -118,24 +157,24 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 828, + "total": 619, "by_step": { - "recall": 417, + "recall": 315, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, + "shape_arcs": 1, "shape_probe_coverage": 5, - "shape_probe": 213, - "shape_groups": 2, + "shape_probe": 107, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 298, + "shape": 196, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 1, - "phase_settle": 7, - "phase_place_bindings": 1 + "bind": 97, + "phase_bind": 2, + "phase_settle": 9, + "phase_place_bindings": 0 } }, "rendered_sentence": "Could not tell who is giving and who is receiving among \"G20\", \"Germany\", and \"India\". Put \"from\" or \"to\" before a name.", @@ -148,6 +187,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -620,7 +660,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "d9e0eb5cd99248bc851045e80fcfef32" + "x-dfo-trace-id": "6a837108e9cb4b74b197a33c82a6e92f" }, "json": { "schema_version": 1, @@ -629,11 +669,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "d9e0eb5cd99248bc851045e80fcfef32", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6a837108e9cb4b74b197a33c82a6e92f", "warnings": [], "timing_ms": { - "total": 960, + "total": 953, "by_step": { "coverage": 0 } @@ -653,21 +693,22 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 841, + "total": 847, "by_step": { "validate": 0, "walk": 1, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 599, + "shape": 638, "bind": 0, "where_places": 0, - "materialise": 132, - "answer": 3, - "options": 106 + "materialise": 110, + "answer": 4, + "options": 94 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -2179,7 +2220,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -2254,30 +2295,30 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 390, + "total": 339, "by_step": { - "recall": 2, - "phase_resolve_places": 0, + "recall": 1, + "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 5, - "shape_probe": 106, - "shape_groups": 2, + "shape_probe_coverage": 6, + "shape_probe": 95, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 198, + "shape": 169, "phase_prune_and_rank": 0, - "bind": 88, + "bind": 84, "phase_bind": 9, "phase_settle": 8, "phase_place_bindings": 1, "phase_facet_requests": 0, - "materialise": 18, + "materialise": 17, "phase_materialise": 0, - "answer": 10, + "answer": 9, "options": 6, - "phase_outcome": 50 + "phase_outcome": 34 } }, "restatement": { @@ -2300,6 +2341,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -2814,7 +2894,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -3352,7 +3432,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json index d8ca5fd..17760cf 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -72,30 +72,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -108,6 +108,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -562,7 +570,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1280,7 +1288,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3265,18 +3273,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3290,6 +3298,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json index 21918dc..e8343b6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "88156a0c48754c7fb0d5c5a544daed09" + "x-dfo-trace-id": "4b576ea3cd364ddeb664b3b219dffb19" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "88156a0c48754c7fb0d5c5a544daed09", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "4b576ea3cd364ddeb664b3b219dffb19", "warnings": [], "timing_ms": { - "total": 1686, + "total": 1260, "by_step": { "coverage": 0, - "extract": 1680, + "extract": 1255, "cache_lookup": 0 } }, @@ -122,6 +122,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -227,9 +241,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 2, + "total": 1, "by_step": { - "recall": 2, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -279,6 +293,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json index e3d62bb..f77a9d9 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -45,21 +45,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -69,30 +71,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -110,6 +112,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -525,7 +541,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1178,7 +1194,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json index 0d16e6e..1ec2f9f 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -69,9 +69,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -118,6 +118,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json index a0d1250..ac800b2 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -71,28 +71,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -284,6 +284,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -806,7 +814,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2340,7 +2348,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json index a006d18..07027a2 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4b32dbe3eadc46e5b1815c1408980fef" + "x-dfo-trace-id": "009afd1dc09e44299c2004e111d17991" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4b32dbe3eadc46e5b1815c1408980fef", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "009afd1dc09e44299c2004e111d17991", "warnings": [], "timing_ms": { - "total": 2102, + "total": 2627, "by_step": { "coverage": 0, - "extract": 990, + "extract": 1263, "cache_lookup": 0 } }, @@ -61,8 +61,8 @@ "input_tokens": 2239, "output_tokens": 164, "cached_tokens": 842, - "jev_input_tokens": 16995, - "jev_output_tokens": 3458 + "jev_input_tokens": 17402, + "jev_output_tokens": 3500 }, "timed_out": false }, @@ -71,30 +71,30 @@ { "warnings": [], "timing_ms": { - "total": 1107, + "total": 1129, "by_step": { "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 103, + "shape_arcs": 4, + "shape_probe_coverage": 4, + "shape_probe": 151, "shape_groups": 45, "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 439, + "shape": 407, "phase_prune_and_rank": 0, - "bind": 149, - "phase_bind": 7, - "phase_settle": 14, + "bind": 127, + "phase_bind": 10, + "phase_settle": 24, "phase_place_bindings": 8, "phase_facet_requests": 0, - "materialise": 135, + "materialise": 144, "phase_materialise": 0, - "answer": 33, - "options": 161, - "phase_outcome": 159 + "answer": 185, + "options": 98, + "phase_outcome": 124 } }, "restatement": { @@ -114,6 +114,45 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -1919,7 +1958,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2838,7 +2877,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2941,24 +2980,24 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 828, + "total": 619, "by_step": { - "recall": 417, + "recall": 315, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, + "shape_arcs": 1, "shape_probe_coverage": 5, - "shape_probe": 213, - "shape_groups": 2, + "shape_probe": 107, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 298, + "shape": 196, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 1, - "phase_settle": 7, - "phase_place_bindings": 1 + "bind": 97, + "phase_bind": 2, + "phase_settle": 9, + "phase_place_bindings": 0 } }, "rendered_sentence": "Could not tell who is giving and who is receiving among \"G20\", \"Germany\", and \"India\". Put \"from\" or \"to\" before a name.", @@ -2971,6 +3010,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json index b87dfa5..91e3f40 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -71,28 +71,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -284,6 +284,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -806,7 +814,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2285,7 +2293,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json index 166cb0e..fad67ba 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json @@ -45,8 +45,8 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "febf95d73157448f9ad342fe31a897d4", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "6c90259bc5dc43649740c2e47cb555bc", "warnings": [], "timing_ms": { "total": 1, @@ -68,9 +68,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -117,6 +117,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json index f4df983..ae28288 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "88156a0c48754c7fb0d5c5a544daed09" + "x-dfo-trace-id": "4b576ea3cd364ddeb664b3b219dffb19" }, "json": { "schema_version": 1, @@ -45,14 +45,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "88156a0c48754c7fb0d5c5a544daed09", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "4b576ea3cd364ddeb664b3b219dffb19", "warnings": [], "timing_ms": { - "total": 1686, + "total": 1260, "by_step": { "coverage": 0, - "extract": 1680, + "extract": 1255, "cache_lookup": 0 } }, @@ -121,6 +121,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -226,9 +240,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 2, + "total": 1, "by_step": { - "recall": 2, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -278,6 +292,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json index 5076e2c..8a9eadc 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2fefffc9aac84b4fae2eb1888a1d3b74" + "x-dfo-trace-id": "21bb19c92c824a70b2eb378e85a9cfd0" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "2fefffc9aac84b4fae2eb1888a1d3b74", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "21bb19c92c824a70b2eb378e85a9cfd0", "warnings": [], "timing_ms": { - "total": 2300, + "total": 8287, "by_step": { "coverage": 0, - "extract": 1022, - "cache_lookup": 0 + "extract": 1330, + "cache_lookup": 2 } }, "llm_usage": { @@ -71,28 +71,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1274, + "total": 6951, "by_step": { - "recall": 0, + "recall": 261, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 112, - "shape_groups": 5, + "shape_arcs": 7, + "shape_probe": 122, + "shape_groups": 6, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 237, + "shape": 241, "phase_prune_and_rank": 0, - "bind": 214, - "phase_bind": 3, - "phase_settle": 7, - "phase_place_bindings": 27, + "bind": 142, + "phase_bind": 17, + "phase_settle": 6, + "phase_place_bindings": 490, "phase_facet_requests": 0, - "materialise": 124, + "materialise": 115, "phase_materialise": 1, - "answer": 25, - "phase_outcome": 636 + "answer": 243, + "phase_outcome": 5435 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -284,6 +284,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -806,7 +814,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2340,7 +2348,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json index 5d348bd..e99807c 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -69,9 +69,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -118,6 +118,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json index c6262fd..8442bcc 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4d9323abf43e4fccadfbd64caf2b371c" + "x-dfo-trace-id": "1e95940d311043d0b63bd27a87996439" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4d9323abf43e4fccadfbd64caf2b371c", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "1e95940d311043d0b63bd27a87996439", "warnings": [], "timing_ms": { - "total": 1772, + "total": 2200, "by_step": { "coverage": 0, - "extract": 876, + "extract": 1432, "cache_lookup": 0 } }, @@ -72,30 +72,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 892, + "total": 757, "by_step": { - "recall": 414, + "recall": 316, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 93, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 72, "shape_groups": 5, "shape_labels": 10, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 205, + "shape": 179, "phase_prune_and_rank": 0, - "bind": 101, + "bind": 89, "phase_bind": 10, - "phase_settle": 12, - "phase_place_bindings": 11, + "phase_settle": 13, + "phase_place_bindings": 12, "phase_facet_requests": 0, "materialise": 9, "phase_materialise": 0, - "answer": 2, - "options": 81, - "phase_outcome": 47 + "answer": 1, + "options": 79, + "phase_outcome": 49 } }, "restatement": { @@ -108,6 +108,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [ @@ -562,7 +570,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1280,7 +1288,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3265,18 +3273,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 466, + "total": 330, "by_step": { - "recall": 339, + "recall": 216, "phase_resolve_places": 1, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 122, - "shape_groups": 1, + "shape_probe": 108, + "shape_groups": 2, "shape_labels": 0, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 126, + "shape": 113, "phase_prune_and_rank": 0 } }, @@ -3290,6 +3298,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json index 187b0e2..f6404bf 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4b32dbe3eadc46e5b1815c1408980fef" + "x-dfo-trace-id": "009afd1dc09e44299c2004e111d17991" }, "json": { "schema_version": 1, @@ -46,14 +46,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4b32dbe3eadc46e5b1815c1408980fef", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "009afd1dc09e44299c2004e111d17991", "warnings": [], "timing_ms": { - "total": 2102, + "total": 2627, "by_step": { "coverage": 0, - "extract": 990, + "extract": 1263, "cache_lookup": 0 } }, @@ -61,8 +61,8 @@ "input_tokens": 2239, "output_tokens": 164, "cached_tokens": 842, - "jev_input_tokens": 16995, - "jev_output_tokens": 3458 + "jev_input_tokens": 17402, + "jev_output_tokens": 3500 }, "timed_out": false }, @@ -72,32 +72,71 @@ "variable_text": "GDP", "warnings": [], "timing_ms": { - "total": 1107, + "total": 1129, "by_step": { "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 103, + "shape_arcs": 4, + "shape_probe_coverage": 4, + "shape_probe": 151, "shape_groups": 45, "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 439, + "shape": 407, "phase_prune_and_rank": 0, - "bind": 149, - "phase_bind": 7, - "phase_settle": 14, + "bind": 127, + "phase_bind": 10, + "phase_settle": 24, "phase_place_bindings": 8, "phase_facet_requests": 0, - "materialise": 135, + "materialise": 144, "phase_materialise": 0, - "answer": 33, - "options": 161, - "phase_outcome": 159 + "answer": 185, + "options": 98, + "phase_outcome": 124 } }, + "entity_refs": [ + { + "text": "G20", + "refs": [ + "groups/G20", + "country/ARG", + "country/AUS", + "country/BRA", + "country/CAN", + "country/CHN", + "country/DEU", + "country/FRA", + "country/GBR", + "country/IDN", + "country/IND", + "country/ITA", + "country/JPN", + "country/KOR", + "country/MEX", + "country/RUS", + "country/SAU", + "country/TUR", + "country/USA", + "country/ZAF" + ] + }, + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "India", + "refs": [ + "country/IND" + ] + } + ], "operations": [], "departures": [ { @@ -1903,7 +1942,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2822,7 +2861,7 @@ "start_year": 2015, "end_year": 2015 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -2925,24 +2964,24 @@ "variable_text": "ODA", "warnings": [], "timing_ms": { - "total": 828, + "total": 619, "by_step": { - "recall": 417, + "recall": 315, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, + "shape_arcs": 1, "shape_probe_coverage": 5, - "shape_probe": 213, - "shape_groups": 2, + "shape_probe": 107, + "shape_groups": 3, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 298, + "shape": 196, "phase_prune_and_rank": 0, - "bind": 104, - "phase_bind": 1, - "phase_settle": 7, - "phase_place_bindings": 1 + "bind": 97, + "phase_bind": 2, + "phase_settle": 9, + "phase_place_bindings": 0 } }, "rendered_sentence": "Could not tell who is giving and who is receiving among \"G20\", \"Germany\", and \"India\". Put \"from\" or \"to\" before a name.", @@ -2955,6 +2994,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json index 6c4ac7f..a526083 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "6d68317966c44c48a0701ff661a5e655" + "x-dfo-trace-id": "74e9acc99aff40f7a653093976c55e3b" }, "json": { "schema_version": 1, @@ -45,14 +45,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "6d68317966c44c48a0701ff661a5e655", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "74e9acc99aff40f7a653093976c55e3b", "warnings": [], "timing_ms": { - "total": 4868, + "total": 4632, "by_step": { "coverage": 0, - "extract": 1143, + "extract": 1209, "cache_lookup": 0 } }, @@ -60,8 +60,8 @@ "input_tokens": 2237, "output_tokens": 215, "cached_tokens": 842, - "jev_input_tokens": 25205, - "jev_output_tokens": 5698 + "jev_input_tokens": 25612, + "jev_output_tokens": 5740 }, "timed_out": false }, @@ -71,30 +71,30 @@ "variable_text": "health ODA disbursements", "warnings": [], "timing_ms": { - "total": 3437, + "total": 3118, "by_step": { - "recall": 538, + "recall": 753, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 85, + "shape_arcs": 75, "shape_probe_coverage": 3, - "shape_probe": 426, - "shape_groups": 43, + "shape_probe": 164, + "shape_groups": 44, "shape_labels": 9, - "shape_admission": 1, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1403, + "shape": 695, "phase_prune_and_rank": 0, - "bind": 228, - "phase_bind": 458, - "phase_settle": 103, - "phase_place_bindings": 23, + "bind": 275, + "phase_bind": 190, + "phase_settle": 91, + "phase_place_bindings": 19, "phase_facet_requests": 0, - "materialise": 385, - "phase_materialise": 1, - "answer": 18, - "options": 174, - "phase_outcome": 106 + "materialise": 616, + "phase_materialise": 0, + "answer": 20, + "options": 307, + "phase_outcome": 152 } }, "restatement": { @@ -112,6 +112,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -579,12 +593,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -599,6 +607,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -1424,7 +1438,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3752,30 +3766,30 @@ } ], "timing_ms": { - "total": 3091, + "total": 3017, "by_step": { - "recall": 450, - "phase_resolve_places": 0, + "recall": 704, + "phase_resolve_places": 1, "phase_check_entities": 0, - "shape_arcs": 93, + "shape_arcs": 82, "shape_probe_coverage": 2, - "shape_probe": 98, - "shape_groups": 44, - "shape_labels": 9, + "shape_probe": 99, + "shape_groups": 47, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 374, + "shape": 365, "phase_prune_and_rank": 0, - "bind": 223, - "phase_bind": 160, - "phase_settle": 51, - "phase_place_bindings": 27, + "bind": 402, + "phase_bind": 196, + "phase_settle": 88, + "phase_place_bindings": 44, "phase_facet_requests": 0, - "materialise": 1197, + "materialise": 512, "phase_materialise": 0, - "answer": 20, - "options": 455, - "phase_outcome": 134 + "answer": 58, + "options": 511, + "phase_outcome": 136 } }, "restatement": { @@ -3793,6 +3807,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -4260,12 +4288,6 @@ ] }, "facets": { - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" - }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -4280,6 +4302,12 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" } }, "slot_options": [ @@ -5105,7 +5133,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -7438,30 +7466,30 @@ } ], "timing_ms": { - "total": 707, + "total": 1849, "by_step": { - "recall": 3, + "recall": 391, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 6, - "shape_probe": 146, - "shape_groups": 48, - "shape_labels": 9, + "shape_arcs": 4, + "shape_probe_coverage": 2, + "shape_probe": 126, + "shape_groups": 55, + "shape_labels": 10, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 316, + "shape": 311, "phase_prune_and_rank": 0, - "bind": 143, - "phase_bind": 4, - "phase_settle": 16, - "phase_place_bindings": 7, + "bind": 139, + "phase_bind": 15, + "phase_settle": 27, + "phase_place_bindings": 426, "phase_facet_requests": 0, - "materialise": 98, - "phase_materialise": 1, - "answer": 6, - "options": 108, - "phase_outcome": 5 + "materialise": 93, + "phase_materialise": 0, + "answer": 244, + "options": 193, + "phase_outcome": 10 } }, "restatement": { @@ -7479,6 +7507,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [ { @@ -8884,7 +8926,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9417,7 +9459,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json index dd1f3e0..e1916ab 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -44,21 +44,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -68,30 +70,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -109,6 +111,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -524,7 +540,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1177,7 +1193,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3775,7 +3791,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4176,7 +4192,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4205,7 +4221,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4505,7 +4521,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4522,7 +4538,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json index 9888ea9..86968a3 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -45,15 +45,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -69,9 +69,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -118,6 +118,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -267,7 +277,7 @@ "error": { "class": "IncompleteAnswerError", "code": "answer_incomplete", - "trace_id": "a321fb82bfba461b9dc922634789650f" + "trace_id": "304fe92b998b45849ff11a547aadc3e8" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json index 95bbba3..44e3548 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json @@ -111,7 +111,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f8dc4c6d0e4d4ce9882d862d2ed5b3ef" + "x-dfo-trace-id": "6a9a38fa39014e7282da94b82d6ba3ee" }, "json": { "schema_version": 1, @@ -943,7 +943,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json index 3898c8f..dff0cc7 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json @@ -111,7 +111,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f8dc4c6d0e4d4ce9882d862d2ed5b3ef" + "x-dfo-trace-id": "6a9a38fa39014e7282da94b82d6ba3ee" }, "json": { "schema_version": 1, @@ -539,7 +539,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104", @@ -979,7 +979,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json index 556ecbb..35c65cb 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json @@ -211,7 +211,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -612,7 +612,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -641,7 +641,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -940,7 +940,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json index a90a960..517e8c4 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json @@ -231,12 +231,12 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bff64c2e088f43959abac4151c6a78e4" + "x-dfo-trace-id": "6f93d15300c8413191296f90fbc4b8b0" }, "json": { "schema_version": 1, "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0", + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8", "versions": [ { "content_version": "cv_25fa336da15247db708dd220b2d933a2", @@ -248,28 +248,28 @@ ], "op": "sum" }, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_9417c96e4e09dd36053fc395c5b0f92c", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_e7f6ed9ddc5ca69902f92a8866f93ef7", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" } ], "next_cursor": null, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json index 898c35a..d8e8c73 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json @@ -211,7 +211,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -612,7 +612,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -641,7 +641,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -940,7 +940,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -953,7 +953,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "c1f0030e84b5418d89553827b503d006" + "trace_id": "42460c90e7274dd19ecba24a6a0377e9" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json index f56d10d..87efd88 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json @@ -211,7 +211,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -612,7 +612,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -641,7 +641,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -940,7 +940,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -957,7 +957,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json index c15112c..8916674 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:42Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:32:01Z" }, "call": [ { @@ -94,12 +94,12 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bff64c2e088f43959abac4151c6a78e4" + "x-dfo-trace-id": "6f93d15300c8413191296f90fbc4b8b0" }, "json": { "schema_version": 1, "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0", + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8", "versions": [ { "content_version": "cv_25fa336da15247db708dd220b2d933a2", @@ -111,28 +111,28 @@ ], "op": "sum" }, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_9417c96e4e09dd36053fc395c5b0f92c", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_e7f6ed9ddc5ca69902f92a8866f93ef7", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" } ], "next_cursor": null, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json index bcf05da..85a980e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json @@ -111,7 +111,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f8dc4c6d0e4d4ce9882d862d2ed5b3ef" + "x-dfo-trace-id": "6a9a38fa39014e7282da94b82d6ba3ee" }, "json": { "schema_version": 1, @@ -539,7 +539,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104", @@ -957,7 +957,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, @@ -983,7 +983,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json index e1e5248..23646db 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json @@ -111,7 +111,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f8dc4c6d0e4d4ce9882d862d2ed5b3ef" + "x-dfo-trace-id": "6a9a38fa39014e7282da94b82d6ba3ee" }, "json": { "schema_version": 1, @@ -539,7 +539,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104", @@ -957,7 +957,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, @@ -983,7 +983,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json index 33d49d7..50d58fe 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:31Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:53Z" }, "call": [ { @@ -112,7 +112,7 @@ "status": 404, "headers": { "content-type": "application/problem+json", - "x-dfo-trace-id": "02a3a5e50f21446ea06f9f064086059b" + "x-dfo-trace-id": "5228b20a07a147e9861e20170e7363f1" }, "json": { "type": "/codes/snapshot_not_found", @@ -120,7 +120,7 @@ "status": 404, "detail": "'spec_774d6c001a6250aa67ca676ab067895e' has no version at content_version 'cv_00000000000000000000000000000000'", "code": "snapshot_not_found", - "trace_id": "02a3a5e50f21446ea06f9f064086059b", + "trace_id": "5228b20a07a147e9861e20170e7363f1", "capability_version": "dset_cc753cefa9199881", "retryable": false } @@ -132,7 +132,7 @@ "error": { "class": "NotFoundError", "code": "snapshot_not_found", - "trace_id": "02a3a5e50f21446ea06f9f064086059b" + "trace_id": "5228b20a07a147e9861e20170e7363f1" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json index 58009b1..856d5c5 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:29Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:51Z" }, "call": [ { @@ -112,7 +112,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f8dc4c6d0e4d4ce9882d862d2ed5b3ef" + "x-dfo-trace-id": "6a9a38fa39014e7282da94b82d6ba3ee" }, "json": { "schema_version": 1, @@ -540,7 +540,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104", @@ -958,7 +958,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6bdc7a9de08e4bceb3e1e8eab34d4ad1" + "x-dfo-trace-id": "7e3ff4f01985498db43aebbf83d13839" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json index b838bb6..5e6acb1 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -44,21 +44,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -68,30 +70,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -109,6 +111,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -524,7 +540,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1177,7 +1193,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3775,7 +3791,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4175,7 +4191,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4204,7 +4220,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4503,7 +4519,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true }, @@ -4529,7 +4545,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "c1f0030e84b5418d89553827b503d006" + "trace_id": "42460c90e7274dd19ecba24a6a0377e9" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json index 53d3564..6e10641 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -44,21 +44,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -68,30 +70,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -109,6 +111,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -524,7 +540,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1177,7 +1193,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3875,7 +3891,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4276,7 +4292,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4305,7 +4321,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4604,7 +4620,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4621,7 +4637,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json index ed95d0e..b3db0e5 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json @@ -379,7 +379,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -786,7 +786,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -815,7 +815,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -1099,7 +1099,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -1117,7 +1117,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json index 00ce7f5..05c7be4 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json @@ -278,7 +278,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -685,7 +685,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -714,7 +714,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -998,7 +998,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -1016,7 +1016,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-accepted-running.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-accepted-running.json new file mode 100644 index 0000000..8f0d10e --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-accepted-running.json @@ -0,0 +1,1474 @@ +{ + "format_version": 1, + "name": "fetch-spec-accepted-running", + "description": "A 202 reads pending or running: the client polls either as an operation still under way, with the same pacing, and downloads the done manifest's file.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with the 202 reading running where it read pending." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 1963, + "end_year": 2024 + } + } + }, + "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1963 to 2024. Current US dollars · OECD DAC2a.", + "entity_groups": { + "destination": { + "label": "G77 countries", + "group_id": "groups/G77" + }, + "origin": { + "label": "DAC countries", + "group_id": "groups/OECD.DAC" + } + } + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 1963, + "end_year": 2024 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry-after": "2", + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ], + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 1963 + } + } + }, + "content_version": "cv_3d58d26a874dc30b1bba7d5ad6dd90ee", + "prepared_at": "2026-10-23T18:38:28Z", + "coverage": { + "rows": 109318, + "dimensions": [ + { + "label": "financingProvider", + "count": 32, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 133, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 62 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 1963 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 1963 + }, + "graph_revision": "dfo-dev-dc-datacommons-service-00264-2s9", + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-23T18:14:12Z", + "content_hash": "29eb81d7b6c88641b1d4e8eb5e850ca36de66b99d6e9e09680aac020507a6392", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_cc753cefa9199881", + "materialiser_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 109318 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", + "served_from": "materialise", + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 4 + }, + "bytes": 473679, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-23T18:38:31.580044+00:00", + "tier": "working", + "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + }, + { + "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", + "rendering": { + "statistics": "series" + }, + "bytes": 144274, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-23T18:38:31.580044+00:00", + "tier": "working", + "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39" + } + ], + "series_count": 3656, + "output_options": { + "capability_version": "dset_cc753cefa9199881", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 32 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 133 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 62 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_class", + "token": "financingProvider_party_class", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_whole", + "token": "financingProvider_party_whole", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 133, + "covered": 132 + }, + "missing": [ + { + "ref": "country/SSD", + "label": "South Sudan" + } + ], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_class", + "token": "financingRecipient_party_class", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_whole", + "token": "financingRecipient_party_whole", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_kind", + "financingRecipient_label", + "financingRecipient_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 62 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 133 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 62 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 32 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 133 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 32 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "retention": { + "pinned": false, + "held_until": "2026-11-22T18:38:31.579178Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65" + }, + "response": { + "status": 302, + "headers": { + "content-type": "text/html", + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 109318, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "content_version": "cv_3d58d26a874dc30b1bba7d5ad6dd90ee", + "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1963 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json index b1e43b7..ecdf113 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -509,12 +509,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -535,12 +535,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -561,12 +561,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -586,267 +586,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1257,7 +997,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1280,7 +1020,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1662,7 +1402,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1723,17 +1463,7 @@ 1.5, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json index c69fc38..ab4e913 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -913,7 +913,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, @@ -940,7 +940,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json index 23e0622..38256c0 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json @@ -177,7 +177,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -584,7 +584,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -613,7 +613,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -897,7 +897,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -915,7 +915,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json index bea5f54..6d1c279 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:14Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:35Z" }, "call": [ { @@ -182,7 +182,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "5de76faaaff84624ac1026e8e9beb150" + "x-dfo-trace-id": "1855a065f7494cd6ba7eecd9fd790858" }, "json": { "schema_version": 1, @@ -584,7 +584,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261020T170016Z-691bf0da", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:15.216372+00:00" + "confirmed_at": "2026-10-24T16:30:35.784659+00:00" }, "warnings": [], "diagnostics": [ @@ -607,7 +607,7 @@ "created_at": "2026-10-23T16:58:55.692876+00:00", "tier": "working", "url": "/api/datasets/spec_4c228c73be6c18efd0939eabb3b3c456/cv_1868d697e8e7d56da6a83740a940c2e5/files/sha256:582f586bcb05d6807c91e6b5d88779c13c5c0962cd42e793184e8c6c8c90d2d9", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:ffd0e9eaabfc35d3113188c82648ce0bf809307a01a024b52b0baa133ef63d18", @@ -1024,7 +1024,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-20T06:50:59.874372Z" @@ -1113,7 +1113,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "fb2aa42a24b34e7eb4ceda53dd1ba402" + "x-dfo-trace-id": "37247e5873b241a7aee7ac321de35814" }, "json": { "schema_version": 1, @@ -1122,11 +1122,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "fb2aa42a24b34e7eb4ceda53dd1ba402", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "37247e5873b241a7aee7ac321de35814", "warnings": [], "timing_ms": { - "total": 400, + "total": 442, "by_step": { "coverage": 0 } @@ -1145,21 +1145,22 @@ } ], "timing_ms": { - "total": 258, + "total": 321, "by_step": { - "validate": 7, - "walk": 190, - "reread_arcs": 2, + "validate": 3, + "walk": 227, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 3, + "shape": 4, "bind": 0, "where_places": 0, - "materialise": 31, - "answer": 15, - "options": 10 + "materialise": 33, + "answer": 42, + "options": 11 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [ @@ -1571,7 +1572,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2300,7 +2301,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -4932,7 +4933,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A582f586bcb05d6807c91e6b5d88779c13c5c0962cd42e793184e8c6c8c90d2d9?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cee12ff09673464d98d98632db4244b1" + "x-dfo-trace-id": "c76ebbf49c774bb7acee93d8877f450d" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json index 4703609..9cf73b6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:12Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:33Z" }, "call": [ { @@ -187,7 +187,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "58ed6d83ebac443ab3da3ef0a085c7f5" + "x-dfo-trace-id": "102dc8c602004615becaa7905509e259" }, "json": { "schema_version": 1, @@ -592,7 +592,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261020T170016Z-691bf0da", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:13.103333+00:00" + "confirmed_at": "2026-10-24T16:30:33.522693+00:00" }, "warnings": [], "diagnostics": [ @@ -615,7 +615,7 @@ "created_at": "2026-10-23T16:58:51.358637+00:00", "tier": "working", "url": "/api/datasets/spec_1ee5f6648c9e46ddcc806fa0034bb6a8/cv_7947f7ed828c0b23b8df4c601d463c09/files/sha256:13a775f3b4811a104717ac226f173d614d685e533def09482b83c55e06505c4c", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:36616ef68df33904cc9dfa37fb145d8fd1563b1b3701710dcd8d9e04ed50d79a", @@ -914,7 +914,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-20T06:50:59.083841Z" @@ -1006,7 +1006,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "3ea2202f586b47b48906c83b42b9a4fe" + "x-dfo-trace-id": "c379d5c730dc4f85b1a5630c2a8b85f8" }, "json": { "schema_version": 1, @@ -1015,11 +1015,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "3ea2202f586b47b48906c83b42b9a4fe", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "c379d5c730dc4f85b1a5630c2a8b85f8", "warnings": [], "timing_ms": { - "total": 340, + "total": 461, "by_step": { "coverage": 0 } @@ -1032,21 +1032,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 288, + "total": 405, "by_step": { - "validate": 3, - "walk": 225, + "validate": 4, + "walk": 190, "reread_arcs": 2, "detect_edits": 0, "resolve_survivors": 0, - "shape": 3, + "shape": 4, "bind": 0, - "where_places": 0, - "materialise": 12, - "answer": 41, - "options": 2 + "where_places": 93, + "materialise": 14, + "answer": 95, + "options": 3 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -1457,7 +1458,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2056,7 +2057,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -4663,7 +4664,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A13a775f3b4811a104717ac226f173d614d685e533def09482b83c55e06505c4c?X-Goog-Signature=redacted", - "x-dfo-trace-id": "037ba569f0d64fd7a230db5c74978c3f" + "x-dfo-trace-id": "9e24d0570f8f4988a32209d5670538c9" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json index 504f1f0..4130d61 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -911,7 +911,7 @@ "response": { "status": 204, "headers": { - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } } @@ -921,7 +921,7 @@ "error": { "class": "ContractError", "code": "unexpected_response", - "trace_id": "07a61fadcaa94c9eafa158ddc41c07f3" + "trace_id": "8261c9be5a7c406a80692fac6b28ee05" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json index 1f68551..818ed05 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -912,7 +912,7 @@ "status": 200, "headers": { "content-type": "application/vnd.apache.parquet", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" }, "body_file": "fetch-spec-known-sentence.parquet" } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json index 93fd488..c24d0d2 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -912,7 +912,7 @@ "status": 307, "headers": { "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } } @@ -922,7 +922,7 @@ "error": { "class": "ContractError", "code": "unexpected_response", - "trace_id": "07a61fadcaa94c9eafa158ddc41c07f3" + "trace_id": "8261c9be5a7c406a80692fac6b28ee05" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json index dded642..6e83998 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "https://downloads.example.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -909,7 +909,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "trace_id": "bfc5cc090c4347f489fffcc62fc3d2bf" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json index b1837ee..728a173 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:07Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:23Z" }, "call": [ { @@ -174,7 +174,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f1a36f3b4730463a8de70a4aa9cc0f85" + "x-dfo-trace-id": "bb332867f3894a6291e202e0b4666901" }, "json": { "schema_version": 1, @@ -575,7 +575,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -902,7 +902,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -919,7 +919,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Af4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104?X-Goog-Signature=redacted", - "x-dfo-trace-id": "726df05bf2494e12a8a64e1291a60c57" + "x-dfo-trace-id": "1621b753678947a1ab313a52be193785" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json index bea8c4c..9a5b59c 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:17Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:37Z" }, "call": [ { @@ -249,7 +249,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8f11970eb98c4d8e9a4e79dacba133b9" + "x-dfo-trace-id": "031e93c3d83b4ef9bbead5c617599dee" }, "json": { "schema_version": 1, @@ -535,7 +535,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261021T070020Z-7262111e", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:19.976783+00:00" + "confirmed_at": "2026-10-24T16:30:41.604527+00:00" }, "warnings": [ { @@ -564,7 +564,7 @@ "created_at": "2026-10-23T16:59:04.339940+00:00", "tier": "working", "url": "/api/datasets/spec_f04936b8378cde70bc6289ac1e45ee9b/cv_daec84e443d4e1b37291242d90fc8fa8/files/sha256:a5198249a7b16b895b1b7e8127605c644edaf2cda240201e391fc377aaf4dafd", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:78ad78b09dcc0d40e50f5804d66f3399fa6b851ae4b4ac48b27ce5a6f2124ef0", @@ -869,7 +869,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-20T07:08:48.808348Z" @@ -999,7 +999,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4a5fe9dbf7364316b01946567ba1ab18" + "x-dfo-trace-id": "11177bfa56c249feaec154d376c0e318" }, "json": { "schema_version": 1, @@ -1008,11 +1008,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "4a5fe9dbf7364316b01946567ba1ab18", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "11177bfa56c249feaec154d376c0e318", "warnings": [], "timing_ms": { - "total": 2064, + "total": 1198, "by_step": { "coverage": 0 } @@ -1025,21 +1025,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 2000, + "total": 1118, "by_step": { - "validate": 1, + "validate": 0, "walk": 11, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 1949, - "bind": 1, - "where_places": 0, + "shape": 1069, + "bind": 0, + "where_places": 1, "materialise": 24, "answer": 11, - "options": 3 + "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -2029,7 +2030,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2871,7 +2872,7 @@ "start_year": 2020, "end_year": 2023 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -5311,7 +5312,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa5198249a7b16b895b1b7e8127605c644edaf2cda240201e391fc377aaf4dafd?X-Goog-Signature=redacted", - "x-dfo-trace-id": "e675f244eda341d28e917266242db362" + "x-dfo-trace-id": "f34686e7f0454a87b31b8f3a23ee43a4" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json index dd8a271..e961827 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:23Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:44Z" }, "call": [ { @@ -296,7 +296,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c13351d375404401a8266f1009cb72a5" + "x-dfo-trace-id": "be9bb0e6abf54384a9226f44f6f09902" }, "json": { "schema_version": 1, @@ -580,7 +580,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261021T070020Z-7262111e", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:23.648030+00:00" + "confirmed_at": "2026-10-24T16:30:44.568363+00:00" }, "warnings": [], "diagnostics": [ @@ -603,7 +603,7 @@ "created_at": "2026-10-23T16:59:11.517434+00:00", "tier": "working", "url": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:a382b8f9e3ba634c150c6588e21f79413722d53f7bcdcb9dfd4e929aa4f80993", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:b1f80f2d3df16b6cda3831730ee4749b13e1eb3fff82cdf2f479e71f087bfe2b", @@ -908,7 +908,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-20T07:08:52.858156Z" @@ -1036,7 +1036,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "94e2938030144075b73ca71182f9377a" + "x-dfo-trace-id": "de81189cf3d441c69f9bc70f4786a3d4" }, "json": { "schema_version": 1, @@ -1045,11 +1045,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "94e2938030144075b73ca71182f9377a", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "de81189cf3d441c69f9bc70f4786a3d4", "warnings": [], "timing_ms": { - "total": 1785, + "total": 2566, "by_step": { "coverage": 0 } @@ -1062,21 +1062,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 1737, + "total": 2493, "by_step": { - "validate": 0, + "validate": 1, "walk": 10, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 1700, - "bind": 0, - "where_places": 1, - "materialise": 16, - "answer": 8, + "shape": 1756, + "bind": 1, + "where_places": 0, + "materialise": 20, + "answer": 702, "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -2044,7 +2045,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2882,7 +2883,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -5310,7 +5311,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa382b8f9e3ba634c150c6588e21f79413722d53f7bcdcb9dfd4e929aa4f80993?X-Goog-Signature=redacted", - "x-dfo-trace-id": "40d3efef54434905ad56dd99d8835067" + "x-dfo-trace-id": "d62572e0146a43f89d89c138493238e1" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json index 076139d..f58acdc 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:26Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:48Z" }, "call": [ { @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -612,7 +612,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -896,7 +896,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -914,7 +914,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json index c0149d5..5f174b5 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -517,7 +517,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -546,7 +546,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -830,7 +830,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -844,7 +844,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "trace_id": "bfc5cc090c4347f489fffcc62fc3d2bf" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json index 55f8856..40803a3 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -581,7 +581,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -610,7 +610,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -894,7 +894,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -908,7 +908,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "trace_id": "bfc5cc090c4347f489fffcc62fc3d2bf" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json index 5144675..3e6c833 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:10Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:30Z" }, "call": [ { @@ -183,7 +183,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "52642a89ff44404fb61540fe78b1ca94" + "x-dfo-trace-id": "a1fe53d87b784d23bcc55926b9530dec" }, "json": { "schema_version": 1, @@ -590,7 +590,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -619,7 +619,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -903,7 +903,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -997,7 +997,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "0d356c6a142c45b5a4e8ea173623cc40" + "x-dfo-trace-id": "c4313642ac68484fb1d13d6f7b206d66" }, "json": { "schema_version": 1, @@ -1006,11 +1006,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "0d356c6a142c45b5a4e8ea173623cc40", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "c4313642ac68484fb1d13d6f7b206d66", "warnings": [], "timing_ms": { - "total": 341, + "total": 340, "by_step": { "coverage": 0 } @@ -1023,21 +1023,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 269, + "total": 256, "by_step": { "validate": 4, - "walk": 217, + "walk": 219, "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 4, - "bind": 0, + "shape": 3, + "bind": 1, "where_places": 0, - "materialise": 13, - "answer": 29, - "options": 1 + "materialise": 12, + "answer": 14, + "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -1468,7 +1469,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2031,7 +2032,7 @@ "start_year": 2020, "end_year": 2023 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -4639,7 +4640,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "577ae3aa962c474cadcd801c357ba73e" + "x-dfo-trace-id": "2f0c6beb58394dd390dc7e490b5e6c00" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json index 84c9646..1fec5d0 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -509,7 +509,7 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { @@ -772,7 +772,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -794,12 +794,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -820,12 +820,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -846,12 +846,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -871,267 +871,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1542,7 +1282,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1565,7 +1305,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1947,7 +1687,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -2009,17 +1749,7 @@ 1.5, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 1 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json index a414d60..96921e6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json new file mode 100644 index 0000000..099416b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json @@ -0,0 +1,1474 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-pacing-changes", + "description": "Before each poll the client waits the retry_after_ms of the last operation resource it read: 1.5 seconds from the 202, then 2.5, 4 and 1 from the polls. A client that keeps the 202's value, or reads the Retry-After header in its place, waits otherwise.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with the polls that find the build running reading retry_after_ms 2500, 4000 and 1000 where the recording reads 1500." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 1963, + "end_year": 2024 + } + } + }, + "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1963 to 2024. Current US dollars · OECD DAC2a.", + "entity_groups": { + "destination": { + "label": "G77 countries", + "group_id": "groups/G77" + }, + "origin": { + "label": "DAC countries", + "group_id": "groups/OECD.DAC" + } + } + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 1963, + "end_year": 2024 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry-after": "2", + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "pending", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 2500, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 4000, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "running", + "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "retry_after_ms": 1000, + "progress": { + "rows_written": 0, + "estimate_rows": 109318 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" + }, + "json": { + "operation": { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/AUS", + "country/AUT", + "country/BEL", + "country/CAN", + "country/CHE", + "country/CZE", + "country/DEU", + "country/DNK", + "country/ESP", + "country/EST", + "country/FIN", + "country/FRA", + "country/GBR", + "country/GRC", + "country/HUN", + "country/IRL", + "country/ISL", + "country/ITA", + "country/JPN", + "country/KOR", + "country/LTU", + "country/LUX", + "country/LVA", + "country/NLD", + "country/NOR", + "country/NZL", + "country/POL", + "country/PRT", + "country/SVK", + "country/SVN", + "country/SWE", + "country/USA" + ], + "destination": [ + "country/AFG", + "country/AGO", + "country/ARE", + "country/ARG", + "country/ATG", + "country/AZE", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/BHR", + "country/BHS", + "country/BLZ", + "country/BOL", + "country/BRA", + "country/BRB", + "country/BRN", + "country/BTN", + "country/BWA", + "country/CAF", + "country/CHL", + "country/CHN", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COL", + "country/COM", + "country/CPV", + "country/CRI", + "country/CUB", + "country/DJI", + "country/DMA", + "country/DOM", + "country/DZA", + "country/ECU", + "country/EGY", + "country/ERI", + "country/ETH", + "country/FJI", + "country/FSM", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/GRD", + "country/GTM", + "country/GUY", + "country/HND", + "country/HTI", + "country/IDN", + "country/IND", + "country/IRN", + "country/IRQ", + "country/JAM", + "country/JOR", + "country/KEN", + "country/KHM", + "country/KIR", + "country/KNA", + "country/KWT", + "country/LAO", + "country/LBN", + "country/LBR", + "country/LBY", + "country/LCA", + "country/LKA", + "country/LSO", + "country/MAR", + "country/MDG", + "country/MDV", + "country/MHL", + "country/MLI", + "country/MMR", + "country/MNG", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/MYS", + "country/NAM", + "country/NER", + "country/NGA", + "country/NIC", + "country/NPL", + "country/NRU", + "country/OMN", + "country/PAK", + "country/PAN", + "country/PER", + "country/PHL", + "country/PNG", + "country/PRK", + "country/PRY", + "country/QAT", + "country/RWA", + "country/SAU", + "country/SDN", + "country/SEN", + "country/SGP", + "country/SLB", + "country/SLE", + "country/SLV", + "country/SOM", + "country/SSD", + "country/STP", + "country/SUR", + "country/SWZ", + "country/SYC", + "country/SYR", + "country/TCD", + "country/TGO", + "country/THA", + "country/TJK", + "country/TKM", + "country/TLS", + "country/TON", + "country/TTO", + "country/TUN", + "country/TZA", + "country/UGA", + "country/URY", + "country/VCT", + "country/VEN", + "country/VNM", + "country/VUT", + "country/WSM", + "country/YEM", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 1963 + } + } + }, + "content_version": "cv_3d58d26a874dc30b1bba7d5ad6dd90ee", + "prepared_at": "2026-10-23T18:38:28Z", + "coverage": { + "rows": 109318, + "dimensions": [ + { + "label": "financingProvider", + "count": 32, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 133, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 62 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 1963 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 1963 + }, + "graph_revision": "dfo-dev-dc-datacommons-service-00264-2s9", + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-23T18:14:12Z", + "content_hash": "29eb81d7b6c88641b1d4e8eb5e850ca36de66b99d6e9e09680aac020507a6392", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_cc753cefa9199881", + "materialiser_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 109318 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", + "served_from": "materialise", + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 4 + }, + "bytes": 473679, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-23T18:38:31.580044+00:00", + "tier": "working", + "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + }, + { + "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", + "rendering": { + "statistics": "series" + }, + "bytes": 144274, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-23T18:38:31.580044+00:00", + "tier": "working", + "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39" + } + ], + "series_count": 3656, + "output_options": { + "capability_version": "dset_cc753cefa9199881", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 32 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 133 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 62 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_class", + "token": "financingProvider_party_class", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_whole", + "token": "financingProvider_party_whole", + "state": "available", + "coverage": { + "entities": 32, + "covered": 32 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 133, + "covered": 132 + }, + "missing": [ + { + "ref": "country/SSD", + "label": "South Sudan" + } + ], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_class", + "token": "financingRecipient_party_class", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_whole", + "token": "financingRecipient_party_whole", + "state": "available", + "coverage": { + "entities": 133, + "covered": 133 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_kind", + "financingRecipient_label", + "financingRecipient_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 62 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 133 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 62 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 32 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 133 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 32 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "retention": { + "pinned": false, + "held_until": "2026-11-22T18:38:31.579178Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65" + }, + "response": { + "status": 302, + "headers": { + "content-type": "text/html", + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 109318, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_fbca0f29755230d84729c1243b1d9b45", + "content_version": "cv_3d58d26a874dc30b1bba7d5ad6dd90ee", + "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1963 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", + "poll_waits": [ + 1.5, + 2.5, + 4.0, + 1.0 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json index ee97d16..eb3fdc5 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json index 7929226..5dc6d95 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -521,12 +521,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -547,12 +547,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -573,12 +573,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -598,267 +598,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1269,7 +1009,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1292,7 +1032,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1674,7 +1414,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1736,17 +1476,7 @@ 3.0, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json index 7c36fd8..ed5514f 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json @@ -486,7 +486,7 @@ "headers": { "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -506,12 +506,12 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "progress": { "rows_written": 0, @@ -552,247 +552,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { @@ -800,7 +560,7 @@ "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "progress": { - "rows_written": 105253, + "rows_written": 0, "estimate_rows": 109318 } } @@ -816,7 +576,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { @@ -824,7 +584,7 @@ "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "progress": { - "rows_written": 109318, + "rows_written": 0, "estimate_rows": 109318 } } @@ -840,7 +600,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1251,7 +1011,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1274,7 +1034,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1656,7 +1416,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1718,16 +1478,6 @@ 2.0, 4.0, 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, - 8.0, 8.0 ], "resubmissions": 0 diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json index 94cf7d7..02becd9 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -532,12 +532,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -558,12 +558,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -584,12 +584,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -609,267 +609,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1280,7 +1020,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1303,7 +1043,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1685,7 +1425,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1747,17 +1487,7 @@ 5.0, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json index 8110b3d..b1f3dcf 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json @@ -487,7 +487,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -531,12 +531,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -557,12 +557,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -627,12 +627,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -652,267 +652,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1323,7 +1063,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1346,7 +1086,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1728,7 +1468,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1792,17 +1532,7 @@ 1.5, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json index c28f441..1b2da24 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -913,7 +913,7 @@ "headers": { "content-type": "text/html", "location": "bytes", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json index c89f183..29a3f26 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:29Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:51Z" }, "call": [ { @@ -182,7 +182,7 @@ "status": 400, "headers": { "content-type": "application/problem+json", - "x-dfo-trace-id": "060bc9edc00f4aeb8550070e8c9b2632" + "x-dfo-trace-id": "e229106e38d04e07af32b2895e017913" }, "json": { "type": "/codes/request_invalid", @@ -191,7 +191,7 @@ "detail": "Value error, unknown facet axis/axes: colour", "code": "request_invalid", "pointer": "/input/scope", - "trace_id": "060bc9edc00f4aeb8550070e8c9b2632", + "trace_id": "e229106e38d04e07af32b2895e017913", "capability_version": "dset_cc753cefa9199881", "retryable": false } @@ -203,7 +203,7 @@ "error": { "class": "InvalidRequestError", "code": "request_invalid", - "trace_id": "060bc9edc00f4aeb8550070e8c9b2632" + "trace_id": "e229106e38d04e07af32b2895e017913" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json index a4d3743..e3b2dfb 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json @@ -182,7 +182,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "52642a89ff44404fb61540fe78b1ca94" + "x-dfo-trace-id": "a1fe53d87b784d23bcc55926b9530dec" }, "json": { "schema_version": 1, @@ -589,7 +589,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -618,7 +618,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -902,7 +902,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -996,7 +996,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "0d356c6a142c45b5a4e8ea173623cc40" + "x-dfo-trace-id": "c4313642ac68484fb1d13d6f7b206d66" }, "json": { "schema_version": 1, @@ -1005,11 +1005,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "0d356c6a142c45b5a4e8ea173623cc40", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "c4313642ac68484fb1d13d6f7b206d66", "warnings": [], "timing_ms": { - "total": 341, + "total": 340, "by_step": { "coverage": 0 } @@ -1022,21 +1022,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 269, + "total": 256, "by_step": { "validate": 4, - "walk": 217, + "walk": 219, "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 4, - "bind": 0, + "shape": 3, + "bind": 1, "where_places": 0, - "materialise": 13, - "answer": 29, - "options": 1 + "materialise": 12, + "answer": 14, + "options": 2 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -1467,7 +1468,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -2030,7 +2031,7 @@ "start_year": 2020, "end_year": 2023 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -4634,7 +4635,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "0d356c6a142c45b5a4e8ea173623cc40" + "trace_id": "c4313642ac68484fb1d13d6f7b206d66" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json index 43923a4..2878965 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -913,7 +913,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json index 7ffadd3..dc97e7e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -913,7 +913,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, @@ -940,7 +940,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "07a61fadcaa94c9eafa158ddc41c07f3" + "x-dfo-trace-id": "8261c9be5a7c406a80692fac6b28ee05" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json index cfc71b4..29d6a08 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json @@ -175,7 +175,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "x-dfo-trace-id": "bfc5cc090c4347f489fffcc62fc3d2bf" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -611,7 +611,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "https://storage.googleapis.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -895,7 +895,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -909,7 +909,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "e1bfd7e1ab67428e9dc923e28d07d4f9" + "trace_id": "bfc5cc090c4347f489fffcc62fc3d2bf" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json index 96dc34e..f5755d2 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:37:10.942106+00:00" + "confirmed_at": "2026-10-24T16:30:31.570035+00:00" }, "warnings": [ { @@ -612,7 +612,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -896,7 +896,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json index 34d3e52..1463a62 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "8ff5daac36fe403ab946f5b02785cb0d" + "x-dfo-trace-id": "bf6613bf82be4bddb4d60879aaf907d9" }, "json": { "schema_version": 1, @@ -45,21 +45,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "8ff5daac36fe403ab946f5b02785cb0d", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "bf6613bf82be4bddb4d60879aaf907d9", "warnings": [], "timing_ms": { - "total": 4716, + "total": 2620, "by_step": { "coverage": 0, - "extract": 1242, + "extract": 1068, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 6216, - "output_tokens": 423, - "cached_tokens": 841 + "input_tokens": 2231, + "output_tokens": 102, + "cached_tokens": 841, + "jev_input_tokens": 6586, + "jev_output_tokens": 2060 }, "timed_out": false }, @@ -75,30 +77,30 @@ } ], "timing_ms": { - "total": 3468, + "total": 1548, "by_step": { - "recall": 547, + "recall": 437, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe_coverage": 6, - "shape_probe": 136, - "shape_groups": 43, + "shape_arcs": 2, + "shape_probe_coverage": 4, + "shape_probe": 161, + "shape_groups": 45, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 3, "phase_derive_shapes": 0, - "shape": 1190, + "shape": 326, "phase_prune_and_rank": 0, - "bind": 1278, - "phase_bind": 149, - "phase_settle": 50, - "phase_place_bindings": 19, + "bind": 225, + "phase_bind": 158, + "phase_settle": 56, + "phase_place_bindings": 18, "phase_facet_requests": 0, - "materialise": 30, + "materialise": 41, "phase_materialise": 0, - "answer": 110, - "options": 38, - "phase_outcome": 57 + "answer": 186, + "options": 40, + "phase_outcome": 61 } }, "restatement": { @@ -116,6 +118,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [ + "country/DEU" + ] + }, + { + "text": "Nigeria", + "refs": [ + "country/NGA" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -531,7 +547,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -1184,7 +1200,7 @@ "selected": [] } ], - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3782,7 +3798,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c1f0030e84b5418d89553827b503d006" + "x-dfo-trace-id": "42460c90e7274dd19ecba24a6a0377e9" }, "json": { "schema_version": 1, @@ -4183,7 +4199,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", "served_from": "head", - "confirmed_at": "2026-10-23T18:36:51.837863+00:00" + "confirmed_at": "2026-10-24T16:30:05.017544+00:00" }, "warnings": [ { @@ -4212,7 +4228,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4511,7 +4527,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": true } @@ -4528,7 +4544,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b2396d674b5848e7b1828fca235d84a1" + "x-dfo-trace-id": "b9b4b3a90d6546e09cc738a29bbbb1d6" } } }, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json index 3d1995e..8fc7eea 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:37:32Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:30:53Z" }, "call": [ { @@ -491,7 +491,7 @@ "content-type": "application/json", "location": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry-after": "2", - "x-dfo-trace-id": "fb72515bdace4ea592ff15b4e5b410fc" + "x-dfo-trace-id": "a6d5bb2eff5a48578dce7fbf91715755" }, "json": { "operation": { @@ -513,12 +513,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "043386d87ba247048aa921704d3ff030" + "x-dfo-trace-id": "71ecc596c6034e27b8ba5dd0a5d2c744" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -539,12 +539,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c7ef77e57a864be6a4617b1aeae7c11d" + "x-dfo-trace-id": "760a3bb2de5e430fb316b3f6a4059c67" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -565,12 +565,12 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "cea2df9c98f94601a5e9976e76842f12" + "x-dfo-trace-id": "15f9386c84484af983d33c6d183e5349" }, "json": { "operation": { "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", + "status": "running", "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", "retry_after_ms": 1500, "progress": { @@ -590,267 +590,7 @@ "status": 200, "headers": { "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "7a800f2714b94a8482dc5fb553c669f5" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 1804, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "f911f5f7ca244733b2da3d5ce6913f6d" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2292, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "07d32bbe980e419eb9f8461492ff4c62" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 2903, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "dd33ade549434abf82b662ab5251b0c1" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 3686, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "5", - "x-dfo-trace-id": "51d3664ad3e84fed8da1d94ce250d5de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 4645, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "6", - "x-dfo-trace-id": "6a3b79b90c29464ca15c35d8eafecb96" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 5865, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "d7de7e24059f4d75ae14bd1778b984de" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 7391, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "cd1a9f894cbe4b6a9c1a7ee78315aff0" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "pending", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 0, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "e1c46fecd652459380163afea4dc35b7" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 105253, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "8", - "x-dfo-trace-id": "3b9df177b0a94b069b47c8b441c6f232" - }, - "json": { - "operation": { - "operation_id": "op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "status": "running", - "poll": "/api/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e", - "retry_after_ms": 8000, - "progress": { - "rows_written": 109318, - "estimate_rows": 109318 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_cc325e96d3ac6fdb6721c2468fd261f221bc87ee5eb9d8e82cf4d1f3720bdf6e" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "x-dfo-trace-id": "cd6f7d2857a44f9c947573b696793564" + "x-dfo-trace-id": "2cc73cd4fbaa4a28a350025111f70a79" }, "json": { "operation": { @@ -1261,7 +1001,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:38:31.738121+00:00" + "confirmed_at": "2026-10-24T16:30:59.952146+00:00" }, "warnings": [], "diagnostics": [ @@ -1284,7 +1024,7 @@ "created_at": "2026-10-23T18:38:31.580044+00:00", "tier": "working", "url": "/api/datasets/spec_fbca0f29755230d84729c1243b1d9b45/cv_3d58d26a874dc30b1bba7d5ad6dd90ee/files/sha256:9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:099d1ce36b440868b72174fb9cdff503cc4c7a0f0ef902e66484c5bfbd270f39", @@ -1666,7 +1406,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9242d69bedb460996f21f782b1a85ee5cd7eb967174e3b64a4ec5ade5bebab65?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b0cef6f918794d048a8a5056022de7cc" + "x-dfo-trace-id": "fb09161c837d4874970eaf5a188845da" } } }, @@ -1733,17 +1473,7 @@ 1.5, 1.5, 1.5, - 1.5, - 1.804, - 2.292, - 2.903, - 3.686, - 4.645, - 5.865, - 7.391, - 8.0, - 8.0, - 8.0 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json b/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json index 72fa553..7226186 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json @@ -93,12 +93,12 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bff64c2e088f43959abac4151c6a78e4" + "x-dfo-trace-id": "6f93d15300c8413191296f90fbc4b8b0" }, "json": { "schema_version": 1, "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0", + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8", "next_cursor": null, "complete": true, "items": [ @@ -112,28 +112,28 @@ ], "op": "sum" }, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_9417c96e4e09dd36053fc395c5b0f92c", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "content_version": "cv_e7f6ed9ddc5ca69902f92a8866f93ef7", "base_content_version": null, "rendering": "plain", "groupby": null, - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" } ] } @@ -145,7 +145,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "bff64c2e088f43959abac4151c6a78e4" + "trace_id": "6f93d15300c8413191296f90fbc4b8b0" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json b/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json index decf121..b716c5c 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json @@ -27,7 +27,7 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "a54948450bc0460c9ed02ae930ce385a" + "x-dfo-trace-id": "7a8fcbad75fa4232a0fd7b55729da907" }, "json": { "operation": { @@ -53,7 +53,7 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "7ad3c071f95943deb4d9804df43d9c8f" + "x-dfo-trace-id": "09873539d7e1412baa820fb5f7421322" }, "json": { "operation": { @@ -77,7 +77,7 @@ "error": { "class": "ServerError", "code": "operation_failed", - "trace_id": "7ad3c071f95943deb4d9804df43d9c8f", + "trace_id": "09873539d7e1412baa820fb5f7421322", "long_builds": [ { "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", diff --git a/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json index 7d9f4a8..b34c17c 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:38:40Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:08Z" }, "call": [ { @@ -28,7 +28,7 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "a54948450bc0460c9ed02ae930ce385a" + "x-dfo-trace-id": "7a8fcbad75fa4232a0fd7b55729da907" }, "json": { "operation": { @@ -54,7 +54,7 @@ "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "7ad3c071f95943deb4d9804df43d9c8f" + "x-dfo-trace-id": "09873539d7e1412baa820fb5f7421322" }, "json": { "operation": { @@ -63,137 +63,7 @@ "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", "retry_after_ms": 1500, "progress": { - "rows_written": 20644, - "estimate_rows": 112203 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "82bcbf5ea88a470f8efc4982ca9da566" - }, - "json": { - "operation": { - "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "status": "running", - "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "retry_after_ms": 1500, - "progress": { - "rows_written": 57823, - "estimate_rows": 112203 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "c73d60d488e04687ab17f9b0e571b7d4" - }, - "json": { - "operation": { - "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "status": "running", - "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "retry_after_ms": 1500, - "progress": { - "rows_written": 94473, - "estimate_rows": 112203 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "2", - "x-dfo-trace-id": "a164edf73d6248fe9d741ea324305510" - }, - "json": { - "operation": { - "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "status": "running", - "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "retry_after_ms": 1881, - "progress": { - "rows_written": 112203, - "estimate_rows": 112203 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "3", - "x-dfo-trace-id": "36531c091ceb429b95918024f5490371" - }, - "json": { - "operation": { - "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "status": "running", - "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "retry_after_ms": 2386, - "progress": { - "rows_written": 112203, - "estimate_rows": 112203 - } - } - } - } - }, - { - "request": { - "method": "GET", - "path": "/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5" - }, - "response": { - "status": 200, - "headers": { - "content-type": "application/json", - "retry-after": "4", - "x-dfo-trace-id": "51746ee3252343fabb47578db0ab7fdf" - }, - "json": { - "operation": { - "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "status": "running", - "poll": "/api/datasets/operations/op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", - "retry_after_ms": 3058, - "progress": { - "rows_written": 112203, + "rows_written": 0, "estimate_rows": 112203 } } @@ -209,7 +79,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "399bb2532fb74b8381ec3d2dee8a99e8" + "x-dfo-trace-id": "c5978ef07c5340e0ae21c8881deb8130" }, "json": { "operation": { @@ -626,7 +496,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", "served_from": "materialise", - "confirmed_at": "2026-10-23T18:39:02.862675+00:00" + "confirmed_at": "2026-10-24T16:31:14.752129+00:00" }, "warnings": [ { @@ -655,7 +525,7 @@ "created_at": "2026-10-23T18:39:02.714887+00:00", "tier": "working", "url": "/api/datasets/spec_8150d26a25222b2043e8c12b250b764d/cv_fe2e676a79899730eac6110f58213472/files/sha256:55f95f11ffe010e99407d279d159e956d4dfa6a6ba89f6d73aa32fb952fccd1d", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:39345f0fc420a15e6262bf58781d46ebda6e7e9a0f11fc0c7540826b151a1d0e", @@ -1269,7 +1139,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "957a2fdf109b4617a383ffd39e6b95ca" + "x-dfo-trace-id": "0a02312a9fba4338a5c67e61e4f0c8fd" }, "json": { "schema_version": 1, @@ -1278,11 +1148,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "957a2fdf109b4617a383ffd39e6b95ca", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "0a02312a9fba4338a5c67e61e4f0c8fd", "warnings": [], "timing_ms": { - "total": 1972, + "total": 2806, "by_step": { "coverage": 0 } @@ -1295,21 +1165,22 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 1780, + "total": 2075, "by_step": { - "validate": 0, - "walk": 11, + "validate": 1, + "walk": 10, "reread_arcs": 0, "detect_edits": 0, - "resolve_survivors": 1, - "shape": 1694, - "bind": 1, + "resolve_survivors": 0, + "shape": 1995, + "bind": 0, "where_places": 1, "materialise": 24, - "answer": 12, - "options": 36 + "answer": 11, + "options": 33 } }, + "entity_refs": [], "operations": [], "departures": [ { @@ -3793,7 +3664,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -5614,7 +5485,7 @@ "start_year": 1966, "end_year": 2024 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -8286,7 +8157,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A55f95f11ffe010e99407d279d159e956d4dfa6a6ba89f6d73aa32fb952fccd1d?X-Goog-Signature=redacted", - "x-dfo-trace-id": "99174adf5a674fefa2eb760afac524d3" + "x-dfo-trace-id": "51314836477547c6aff574e07f6b19ab" } } }, @@ -8351,12 +8222,7 @@ "operation_id": "op_d3596ce124b0257af0dfded6707dc8179b5e046e67080dd6995f7e0de23f7fe5", "poll_waits": [ 1.5, - 1.5, - 1.5, - 1.5, - 1.881, - 2.386, - 3.058 + 1.5 ], "resubmissions": 0 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json index 37dacc3..7854333 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:35Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:50Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "dc9cc6e5c1a34ab295ff44b26137f6a1" + "x-dfo-trace-id": "a42078d26ea943a488b4cb642719e808" }, "json": { "schema_version": 1, @@ -47,14 +47,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "dc9cc6e5c1a34ab295ff44b26137f6a1", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "a42078d26ea943a488b4cb642719e808", "warnings": [], "timing_ms": { - "total": 2566, + "total": 4608, "by_step": { "coverage": 0, - "extract": 1061, + "extract": 1312, "cache_lookup": 0 } }, @@ -73,28 +73,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1502, + "total": 2048, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 4, - "shape_probe": 101, + "shape_probe": 96, "shape_groups": 5, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 230, + "shape": 246, "phase_prune_and_rank": 0, - "bind": 192, - "phase_bind": 3, - "phase_settle": 6, - "phase_place_bindings": 27, + "bind": 131, + "phase_bind": 11, + "phase_settle": 7, + "phase_place_bindings": 29, "phase_facet_requests": 0, - "materialise": 250, + "materialise": 113, "phase_materialise": 0, - "answer": 25, - "phase_outcome": 768 + "answer": 106, + "phase_outcome": 1404 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -286,6 +286,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -808,7 +816,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2342,7 +2350,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2380,29 +2388,29 @@ } ], "timing_ms": { - "total": 1199, + "total": 3238, "by_step": { - "recall": 1, + "recall": 321, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 8, - "shape_probe": 237, + "shape_arcs": 86, + "shape_probe_coverage": 32, + "shape_probe": 102, "shape_groups": 22, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 350, + "shape": 316, "phase_prune_and_rank": 0, - "bind": 150, - "phase_bind": 8, - "phase_settle": 27, - "phase_place_bindings": 167, + "bind": 125, + "phase_bind": 26, + "phase_settle": 56, + "phase_place_bindings": 1829, "phase_facet_requests": 0, - "materialise": 218, + "materialise": 162, "phase_materialise": 0, - "answer": 11, - "phase_outcome": 267 + "answer": 104, + "phase_outcome": 299 } }, "rendered_sentence": "2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", @@ -2580,6 +2588,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -3273,7 +3289,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3772,7 +3788,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -4359,7 +4375,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f80a912e90f9426b91d135271778cff7" + "x-dfo-trace-id": "775b92aeffce4d859d3170a45daccd25" }, "json": { "schema_version": 1, @@ -4368,11 +4384,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "f80a912e90f9426b91d135271778cff7", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "775b92aeffce4d859d3170a45daccd25", "warnings": [], "timing_ms": { - "total": 854, + "total": 811, "by_step": { "coverage": 0 } @@ -4385,21 +4401,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 382, + "total": 397, "by_step": { "validate": 0, "walk": 0, - "reread_arcs": 0, + "reread_arcs": 1, "detect_edits": 0, "resolve_survivors": 0, - "shape": 226, - "bind": 1, + "shape": 274, + "bind": 0, "where_places": 0, - "materialise": 152, - "answer": 2, - "options": 1 + "materialise": 121, + "answer": 1, + "options": 0 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -4915,7 +4932,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -4977,19 +4994,19 @@ } ], "timing_ms": { - "total": 1494, + "total": 1120, "by_step": { "validate": 0, - "walk": 1093, + "walk": 797, "reread_arcs": 2, "detect_edits": 0, "resolve_survivors": 0, "shape": 9, "bind": 0, "where_places": 0, - "materialise": 273, + "materialise": 168, "answer": 8, - "options": 109 + "options": 136 } }, "rendered_sentence": "2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", @@ -5156,6 +5173,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -5827,7 +5845,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -6471,7 +6489,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, diff --git a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json index ba20654..eb14cf3 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:49Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:32:06Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "392e75ae92374ca4b32bda343566ed60" + "x-dfo-trace-id": "8419a37e166c4f1c99132fe35dbe31ce" }, "json": { "schema_version": 1, @@ -47,23 +47,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "392e75ae92374ca4b32bda343566ed60", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "8419a37e166c4f1c99132fe35dbe31ce", "warnings": [], "timing_ms": { - "total": 2549, + "total": 3120, "by_step": { "coverage": 0, - "extract": 1164, - "cache_lookup": 1 + "extract": 1374, + "cache_lookup": 0 } }, "llm_usage": { "input_tokens": 2241, "output_tokens": 196, "cached_tokens": 843, - "jev_input_tokens": 15830, - "jev_output_tokens": 3276 + "jev_input_tokens": 20184, + "jev_output_tokens": 4309 }, "timed_out": false }, @@ -73,28 +73,28 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 1381, + "total": 1744, "by_step": { - "recall": 1, + "recall": 2, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 6, - "shape_probe": 223, + "shape_arcs": 3, + "shape_probe": 80, "shape_groups": 5, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 339, + "shape": 178, "phase_prune_and_rank": 0, - "bind": 125, - "phase_bind": 4, - "phase_settle": 8, - "phase_place_bindings": 25, + "bind": 126, + "phase_bind": 11, + "phase_settle": 7, + "phase_place_bindings": 17, "phase_facet_requests": 0, - "materialise": 14, + "materialise": 26, "phase_materialise": 0, - "answer": 25, - "phase_outcome": 840 + "answer": 30, + "phase_outcome": 1347 } }, "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", @@ -286,6 +286,14 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [ + "country/KEN" + ] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -808,7 +816,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2342,7 +2350,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2367,21 +2375,22 @@ "variable_text": "savings", "warnings": [], "timing_ms": { - "total": 356, + "total": 1383, "by_step": { - "recall": 1, + "recall": 222, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe": 110, - "shape_groups": 3, + "shape_probe_coverage": 1, + "shape_probe": 181, + "shape_groups": 41, "shape_labels": 1, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 264, + "shape": 1000, "phase_prune_and_rank": 0, - "bind": 88, - "phase_bind": 3 + "bind": 103, + "phase_bind": 58 } }, "rendered_sentence": "Could not match \"savings\" to a supported indicator. Try a different wording or a related indicator.", @@ -2394,6 +2403,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -2717,7 +2727,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f61373c01c6c48ac82fb99f413a0f978" + "x-dfo-trace-id": "00de3c0cb919474893de7c4eb875f9be" }, "json": { "schema_version": 1, @@ -2726,11 +2736,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "f61373c01c6c48ac82fb99f413a0f978", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "00de3c0cb919474893de7c4eb875f9be", "warnings": [], "timing_ms": { - "total": 380, + "total": 293, "by_step": { "coverage": 0 } @@ -2743,21 +2753,22 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 323, + "total": 242, "by_step": { "validate": 0, "walk": 0, "reread_arcs": 0, "detect_edits": 0, "resolve_survivors": 0, - "shape": 204, + "shape": 149, "bind": 0, - "where_places": 0, - "materialise": 117, - "answer": 2, - "options": 0 + "where_places": 1, + "materialise": 90, + "answer": 1, + "options": 1 } }, + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], @@ -3273,7 +3284,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c" + "capability_version": "cap_9deef72763b45f40" }, "confidence": "high", "available_at_place": true, @@ -3340,6 +3351,7 @@ "states": [] } ], + "entity_refs": [], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json b/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json index ddc05c0..54acd79 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": [ { @@ -42,15 +42,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -66,9 +66,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -115,6 +115,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -249,7 +259,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "a321fb82bfba461b9dc922634789650f" + "trace_id": "304fe92b998b45849ff11a547aadc3e8" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json index e1bbc3c..7763a30 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:11Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:27Z" }, "call": [ { @@ -31,7 +31,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -42,15 +42,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -66,9 +66,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -115,6 +115,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json index cbd9c6c..f930fba 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json @@ -1,11 +1,11 @@ { "format_version": 1, "name": "search-proxy-rate-limited", - "description": "The proxy's 429 body carries no code or retryable: error is the code and retry \"retry_after_delay\" makes it retryable, so the client waits the Retry-After seconds, retries, and reaches the same answer.", + "description": "The proxy's 429 is a problem document like any other refusal: rate_limited has no row in actions.json, so it is a RateLimitError by its status, and retryable true makes the client wait the Retry-After seconds, retry, and reach the same answer.", "origin": { "kind": "synthetic", "derived_from": "search-place-ambiguous", - "edit": "The website proxy's own 429 {error, retry, detail} with Retry-After 2 answers the first search." + "edit": "The website proxy's own 429 rate_limited problem document with Retry-After 2 answers the first search." }, "call": [ { @@ -29,13 +29,19 @@ "response": { "status": 429, "headers": { - "content-type": "application/json", + "content-type": "application/problem+json", + "cache-control": "no-cache", + "x-dfo-trace-id": "77777777777777777777777777777777", "retry-after": "2" }, "json": { - "error": "rate_limited", - "retry": "retry_after_delay", - "detail": "Too many requests from this address. Try again shortly." + "type": "/codes/rate_limited", + "title": "Too Many Requests", + "status": 429, + "detail": "Too many requests: 120 per window per address. Try again in 2s.", + "code": "rate_limited", + "trace_id": "77777777777777777777777777777777", + "retryable": true } } }, @@ -55,7 +61,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -66,15 +72,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -90,9 +96,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -139,6 +145,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json index db4e3ad..76ed394 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json @@ -1,11 +1,11 @@ { "format_version": 1, "name": "search-proxy-unavailable", - "description": "The proxy's 502 body is retryable through its retry member and has no Retry-After, so the client backs off and retries twice, then raises ServerError with the error member, transient_unavailable, as its code.", + "description": "The proxy's 502 problem document says retryable true and has no Retry-After, so the client backs off and retries twice, then raises ServerError, the class of its status, with its code, transient_unavailable, and its trace id.", "origin": { "kind": "synthetic", "derived_from": "search-place-ambiguous", - "edit": "The website proxy's own 502 {error, retry, detail} answers the search and both retries." + "edit": "The website proxy's own 502 transient_unavailable problem document answers the search and both retries." }, "call": [ { @@ -29,12 +29,18 @@ "response": { "status": 502, "headers": { - "content-type": "application/json" + "content-type": "application/problem+json", + "cache-control": "no-cache", + "x-dfo-trace-id": "77777777777777777777777777777777" }, "json": { - "error": "transient_unavailable", - "retry": "retry_after_delay", - "detail": "The Search API is unreachable." + "type": "/codes/transient_unavailable", + "title": "Bad Gateway", + "status": 502, + "detail": "The Search API is unreachable.", + "code": "transient_unavailable", + "trace_id": "77777777777777777777777777777777", + "retryable": true } } }, @@ -53,12 +59,18 @@ "response": { "status": 502, "headers": { - "content-type": "application/json" + "content-type": "application/problem+json", + "cache-control": "no-cache", + "x-dfo-trace-id": "77777777777777777777777777777777" }, "json": { - "error": "transient_unavailable", - "retry": "retry_after_delay", - "detail": "The Search API is unreachable." + "type": "/codes/transient_unavailable", + "title": "Bad Gateway", + "status": 502, + "detail": "The Search API is unreachable.", + "code": "transient_unavailable", + "trace_id": "77777777777777777777777777777777", + "retryable": true } } }, @@ -77,12 +89,18 @@ "response": { "status": 502, "headers": { - "content-type": "application/json" + "content-type": "application/problem+json", + "cache-control": "no-cache", + "x-dfo-trace-id": "77777777777777777777777777777777" }, "json": { - "error": "transient_unavailable", - "retry": "retry_after_delay", - "detail": "The Search API is unreachable." + "type": "/codes/transient_unavailable", + "title": "Bad Gateway", + "status": 502, + "detail": "The Search API is unreachable.", + "code": "transient_unavailable", + "trace_id": "77777777777777777777777777777777", + "retryable": true } } } @@ -92,7 +110,7 @@ "error": { "class": "ServerError", "code": "transient_unavailable", - "trace_id": null, + "trace_id": "77777777777777777777777777777777", "retry_waits": [ 0.5, 1.0 diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json b/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json index 97da3dc..9603c79 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json @@ -60,7 +60,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f" + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8" }, "json": { "schema_version": 1, @@ -71,15 +71,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -95,9 +95,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -144,6 +144,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json index b540d6f..6424a89 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f", + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8", "x-dfo-warning": "Search runs on a reduced index while it is rebuilt." }, "json": { @@ -50,15 +50,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -74,9 +74,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -123,6 +123,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -266,7 +276,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f", + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8", "x-dfo-warning": "Search runs on a reduced index while it is rebuilt.", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, @@ -279,15 +289,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -303,9 +313,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -352,6 +362,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -495,7 +515,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f", + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8", "x-dfo-warning": "Search answers from a cached release.", "deprecation": "@1777593600", "sunset": "Sat, 01 May 2027 00:00:00 GMT" @@ -509,15 +529,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -533,9 +553,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -582,6 +602,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json index f3915bc..8c3b97e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f", + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, "json": { @@ -46,15 +46,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -70,9 +70,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -119,6 +119,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -262,7 +272,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a321fb82bfba461b9dc922634789650f", + "x-dfo-trace-id": "304fe92b998b45849ff11a547aadc3e8", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, "json": { @@ -274,15 +284,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "a321fb82bfba461b9dc922634789650f", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "304fe92b998b45849ff11a547aadc3e8", "warnings": [], "timing_ms": { - "total": 1126, + "total": 1416, "by_step": { "coverage": 0, - "extract": 1119, - "cache_lookup": 1 + "extract": 1297, + "cache_lookup": 0 } }, "llm_usage": { @@ -298,9 +308,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 1, + "total": 115, "by_step": { - "recall": 1, + "recall": 115, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -347,6 +357,16 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json b/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json index 329f75d..36a4e81 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:12Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:28Z" }, "call": [ { @@ -31,7 +31,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "88156a0c48754c7fb0d5c5a544daed09" + "x-dfo-trace-id": "4b576ea3cd364ddeb664b3b219dffb19" }, "json": { "schema_version": 1, @@ -42,14 +42,14 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "88156a0c48754c7fb0d5c5a544daed09", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "4b576ea3cd364ddeb664b3b219dffb19", "warnings": [], "timing_ms": { - "total": 1686, + "total": 1260, "by_step": { "coverage": 0, - "extract": 1680, + "extract": 1255, "cache_lookup": 0 } }, @@ -118,6 +118,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], @@ -223,9 +237,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 2, + "total": 1, "by_step": { - "recall": 2, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -275,6 +289,20 @@ "sources": [], "operations": [] }, + "entity_refs": [ + { + "text": "Kenya", + "refs": [] + }, + { + "text": "Germany", + "refs": [] + }, + { + "text": "Congo", + "refs": [] + } + ], "operations": [], "departures": [], "assumptions": [], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json index f32ec45..e612f0d 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "recorded_at": "2026-10-23T18:39:17Z" + "dfo_commit": "0ba344270784ae9929a369da8acd00b399dfced8", + "recorded_at": "2026-10-24T16:31:33Z" }, "call": [ { @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "9574dd6f16974328a119e8d83e6e7818" + "x-dfo-trace-id": "50172d3089cd486e929895f6865985bb" }, "json": { "schema_version": 1, @@ -49,15 +49,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "035d29cd05fb31d7cb47cfb33197d4002f773df6", - "trace_id": "9574dd6f16974328a119e8d83e6e7818", + "engine_build": "0ba344270784ae9929a369da8acd00b399dfced8", + "trace_id": "50172d3089cd486e929895f6865985bb", "warnings": [], "timing_ms": { - "total": 2030, + "total": 1979, "by_step": { "coverage": 0, - "extract": 1077, - "cache_lookup": 0 + "extract": 1147, + "cache_lookup": 1 } }, "llm_usage": { @@ -97,30 +97,30 @@ } ], "timing_ms": { - "total": 947, + "total": 829, "by_step": { - "recall": 391, + "recall": 300, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 3, "shape_probe_coverage": 5, - "shape_probe": 154, + "shape_probe": 152, "shape_groups": 4, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 309, + "shape": 264, "phase_prune_and_rank": 0, - "bind": 112, + "bind": 97, "phase_bind": 14, - "phase_settle": 7, + "phase_settle": 9, "phase_place_bindings": 1, "phase_facet_requests": 0, - "materialise": 31, + "materialise": 34, "phase_materialise": 0, - "answer": 14, - "options": 8, - "phase_outcome": 60 + "answer": 16, + "options": 36, + "phase_outcome": 58 } }, "restatement": { @@ -141,6 +141,14 @@ } ] }, + "entity_refs": [ + { + "text": "Ethiopia", + "refs": [ + "country/ETH" + ] + } + ], "operations": [ { "verb": "rank", @@ -525,7 +533,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "facets": { "provenance": { "basis": "fallback", @@ -674,7 +682,7 @@ "source": "observed" } ], - "rendered_sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", + "rendered_sentence": "Gross disbursements to Ethiopia from 110 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", @@ -719,7 +727,7 @@ }, { "kind": "slot", - "text": "137 providers", + "text": "110 providers", "segment": "heading", "role": "origin", "binding_ref": "origin:", @@ -974,7 +982,7 @@ "start_year": 2022, "end_year": 2022 }, - "capability_version": "cap_94e25737d859392c", + "capability_version": "cap_9deef72763b45f40", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1128,7 +1136,7 @@ "role_axis_facts": [ { "role": "origin", - "member_count": 137, + "member_count": 110, "members_available": true } ], @@ -3083,7 +3091,7 @@ } } ], - "rendered_sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", + "rendered_sentence": "Gross disbursements to Ethiopia from 110 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", "sentence_plan": [ { "kind": "slot", @@ -3132,7 +3140,7 @@ }, { "kind": "slot", - "text": "137 providers", + "text": "110 providers", "segment": "heading", "role": "origin", "binding_ref": "origin:", @@ -3393,7 +3401,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "204cdb090cb6492b829defbe74a5dfbf" + "x-dfo-trace-id": "66eb538f1f7943f8a03a5c3500185e5a" }, "json": { "schema_version": 1, @@ -3636,7 +3644,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-23T18:39:20.385608+00:00" + "confirmed_at": "2026-10-24T16:31:36.102594+00:00" }, "warnings": [], "diagnostics": [ @@ -3659,7 +3667,7 @@ "created_at": "2026-10-23T16:59:51.176407+00:00", "tier": "working", "url": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_534dd4c2bf9bdafc837d51a3ba4bcf3e/files/sha256:f0ac1a058c4addb59b1974b73706b12ddc112b409aac006d6a561279f61f0c6a", - "enrichment_stamp": "5821dc7ce2050dff29f86570ff50f0adfb78c3ed7c7596e4f24a024892583cb0" + "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" }, { "artifact_digest": "sha256:5b508be6b46ce8e01315f9c89a1837e17ed7b49d7d2554011cfdba9f32203084", @@ -4029,7 +4037,7 @@ ] } }, - "series_coverage_stamp": "0b8c9a18fcc5af19013b21e865c64481503b6a6542f7d2e6628999e6559a47de", + "series_coverage_stamp": "45bdd65f2fd33ac77a897180047080d33ed9db812afe0cbb887bf22e2ac52690", "retention": { "pinned": false, "held_until": "2026-11-19T16:52:44.112184Z" @@ -4047,7 +4055,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Af0ac1a058c4addb59b1974b73706b12ddc112b409aac006d6a561279f61f0c6a?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6ea497e67fff4becbcee2656441d0dac" + "x-dfo-trace-id": "cf517ecd99ac4157ab7d54003b5771a5" } } }, @@ -4070,7 +4078,7 @@ "answer": { "kind": "resolution", "status": "definite", - "sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", + "sentence": "Gross disbursements to Ethiopia from 110 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", "complete": true, "specs": [ "spec_7778beed72f8433bb7fde4293acfd175" @@ -4082,7 +4090,7 @@ "error": { "class": "SearchWarning", "code": null, - "trace_id": "9574dd6f16974328a119e8d83e6e7818" + "trace_id": "50172d3089cd486e929895f6865985bb" } }, { @@ -4118,7 +4126,7 @@ ], "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", "content_version": "cv_534dd4c2bf9bdafc837d51a3ba4bcf3e", - "sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." + "sentence": "Gross disbursements to Ethiopia from 110 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." } ], "missing": [], diff --git a/python/client-contract/src/dfo_client_contract/served/SOURCE.json b/python/client-contract/src/dfo_client_contract/served/SOURCE.json index 8aa6966..4e6aeef 100644 --- a/python/client-contract/src/dfo_client_contract/served/SOURCE.json +++ b/python/client-contract/src/dfo_client_contract/served/SOURCE.json @@ -1,6 +1,6 @@ { "format_version": 1, "repository": "DevelopmentFinanceObservatory/apis", - "commit": "035d29cd05fb31d7cb47cfb33197d4002f773df6", + "commit": "0ba344270784ae9929a369da8acd00b399dfced8", "captured_from": "dfo_apis.app.create_app() in process" } diff --git a/python/client-contract/src/dfo_client_contract/served/openapi.json b/python/client-contract/src/dfo_client_contract/served/openapi.json index c7112d7..e3ca7a2 100644 --- a/python/client-contract/src/dfo_client_contract/served/openapi.json +++ b/python/client-contract/src/dfo_client_contract/served/openapi.json @@ -1756,7 +1756,7 @@ "Datasets" ], "summary": "Post Pin", - "description": "Pin an artifact of a version, and the frame its files render from: the version's own frame and, for a derived version, its base version's frame, servable or aged, so every format stays fetchable and the version reports `retention.pinned`. A frame whose bytes are gone stays unpinned: the named artifact still pins, and `retention` keeps that frame's `held_until`. Only the named artifact's copy waits on the daily pin budget; the frame copies skip it and count toward later calls, so one pin can add up to three copies to the count.", + "description": "Pin an artifact of a version, and the first frame its files can render from that survives, servable or aged: the version's own frame, else, for a derived version, its base version's frame. Every format then stays fetchable and the version reports `retention.pinned`. When no such frame's bytes survive, the named artifact still pins, and `retention` keeps the frames' `held_until`. Only the named artifact's copy waits on the daily pin budget; the frame copy skips it and counts toward later calls, so one pin can add up to two copies to the count.", "operationId": "datasets_post_pin", "parameters": [ { @@ -4295,6 +4295,14 @@ ], "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." }, + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity text of `restatement`, once per text in restatement order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, "operations": { "items": { "$ref": "#/components/schemas/Operation" @@ -7267,6 +7275,14 @@ ], "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." }, + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity text of `restatement`, once per text in restatement order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, "operations": { "items": { "$ref": "#/components/schemas/Operation" @@ -7441,7 +7457,7 @@ "scope_limited" ], "title": "Code", - "description": "what kind of departure this is. 'closest_match': the answer shows the nearest measure the graph holds, not the one asked; a client draws a muted 'Closest match:' lead before the heading, and on a candidates part, whose readings stand in for a measure with no data, once before the first reading. 'measure_not_applied': a named measure qualifier was not applied. 'operation_not_applied': an operation the request named (a share, a ranking) was not run, so the amounts behind it are shown. 'breakdown_not_applied': a breakdown the request named was not applied, so the total is shown. 'entity_unavailable': an entity the request named holds no values in the series the answer reads, one departure per role; for a role the request named as a group, asked is the request's words for the group and the text counts the members without values; the text names any source holding values there that Search does not read. 'year_unavailable': a named year or range falls outside the years served. 'modelled_values': the served values are modelled or estimated. 'group_read_as_members': a named group was read as its member entities; on a flow role the text names the amounts the group's published total counts that no member holds, and, for a group whose published total is not its members' sum, says the source publishes its own figure for the group. 'whole_total_read': a flow side is read as its whole population, the total its source publishes for every party of that side (official donors (DAC) for 'official donors' or a donor side the request named nothing on or summed over; official and private donors (DAC) for 'all donors'); the text says what the total holds and how to list the side's members with open_roles. 'whole_total_unpublished': the request named a whole population ('all donors', 'all recipients') on a side whose dataset publishes no total of it and holds no party outside it, so the side is left unnamed and the answer covers every party the dataset holds there; asked is the request's words, and the text names the dataset. 'direction_discarded': a flow direction the request's own words named was not applied. 'direction_inferred': a place the request named without a direction is read on the one direction that holds data, which over names. 'scope_limited': a no_data answer's check covered only values the engine chose, which the request did not name; its text names only what the check covered ('This check covered only ODA.')" + "description": "what kind of departure this is. 'closest_match': the answer shows the nearest measure the graph holds, not the one asked; a client draws a muted 'Closest match:' lead before the heading, and on a candidates part, whose readings stand in for a measure with no data, once before the first reading. 'measure_not_applied': a named measure qualifier was not applied. 'operation_not_applied': an operation the request named (a share, a ranking) was not run, so the amounts behind it are shown. 'breakdown_not_applied': a breakdown the request named was not applied, so the total is shown. 'entity_unavailable': an entity the request named holds no values in the series the answer reads, one departure per role; for a role the request named as a group, asked is the request's words for the group and the text counts the members without values; the text names any source holding values there that Search does not read. 'year_unavailable': a named year or range falls outside the years served. 'modelled_values': the served values are modelled or estimated. 'group_read_as_members': a named group was read as its member entities; on a flow role the text names the amounts the group's published total counts that no member holds, and, for a group whose published total is not its members' sum, says the source publishes its own figure for the group. 'whole_total_read': a flow side is read as its whole population, the total its source publishes for every party of that side (official donors (DAC) for 'official donors' or a donor side the request named nothing on or summed over; official and private donors (DAC) for 'all donors'); the text says what the total holds and how to list the side's members: in the question's words ('by donor') on the raw_text door, with open_roles on the others. 'whole_total_unpublished': the request named a whole population ('all donors', 'all recipients') on a side whose dataset publishes no total of it and holds no party outside it, so the side is left unnamed and the answer covers every party the dataset holds there; asked is the request's words, and the text names the dataset. 'direction_discarded': a flow direction the request's own words named was not applied. 'direction_inferred': a place the request named without a direction is read on the one direction that holds data, which over names. 'scope_limited': a no_data answer's check covered only values the engine chose, which the request did not name; its text names only what the check covered ('This check covered only ODA.')" }, "binding_ref": { "anyOf": [ @@ -8223,6 +8239,31 @@ "title": "GraphResolveEntity", "description": "A reference with its kind. `kind` is `null` only for a `not_held` entity, which the\ngraph holds no node to classify." }, + "EntityRefs": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "the entity text, equal to some restatement.entities[i].text" + }, + "refs": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Refs", + "description": "the refs the part's answer binds for `text`: a place gives its node; a group, continent or subregion bound as itself gives its own node, or the total its dataset publishes for it (G7 bound as GroupOfSeven); one bound as its members gives the set's own ref first (its node, else that total, else its registry id) and then the members, sorted. [] for an ambiguous text, one that resolved to no node or a node the answer does not bind, and every text of a part refused before its places were bound" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "refs" + ], + "title": "EntityRefs", + "description": "The graph nodes one entity text of a part's restatement binds in the answer." + }, "Exclusion": { "properties": { "ref": { @@ -10522,10 +10563,11 @@ "facet_not_available", "role_incompatible", "role_signature_incompatible", - "qualifier_not_bound" + "qualifier_not_bound", + "timed_out" ], "title": "Reason", - "description": "why nothing could be returned, in contract resolution order. \"entity_not_resolved\" means a named entity could not be resolved to a graph node; \"entity_ambiguous\" means a named entity matched more than one graph candidate and none could be preferred over the others, distinct from \"entity_not_resolved\", where no node matched at all; \"entity_role_not_admitted\" means a named entity resolved to exactly one graph node, but no role any candidate shape declares admits that node's graph type -- the entity is real, just not the kind of thing this query's data is reported for; \"entity_set_too_large\" means every named entity resolved, but the places the request names, counting the members of each group or region among them and summed over the roles they sit on, exceed what the engine binds in one request -- distinct from every other entity_* reason, where one entity, not the size of the set, is what failed; \"variable_not_resolved\" means no StatVar matched the variable text (e.g. an absent posted stat_var_dcid or entity, or no measure match at all); \"role_not_resolved\" means the query names a role the engine could not resolve; \"unit_not_resolved\" means the unit binder could not classify a token in the requested unit phrase against its lexicons; \"no_matching_slice\" means the measure matched fine, but the requested combination has no corresponding data series -- the constructed/derived variable does not exist in the graph at all. Covers an identity resubmit refine edit with no confirmable sibling StatVar for the edited slice, and a dev-finance scheme x purpose x recipient combination that was never published as a series, on raw-text and resubmit alike; \"binding_mismatch\" means the variable resolved and graph-confirmed StatVars exist, but none satisfies the requested slot bindings, either because a resolved value on a bound property mismatched or because the StatVar's value on a bound property is present but could not be read (an unresolvable dcid); distinct from \"no_matching_slice\" (the combination was never published at all) and \"variable_not_resolved\" (no StatVar matched at all); \"denominator_not_available\" means the query asks for a normalised form (per person, per area, a rate or a share) or names a denominator, and the matched series is not in that form or divides by another base; \"no_observations\" means a StatVar WAS confirmed to exist but has no observation at the resolved entity (it exists, but not data here); \"facet_not_available\" means observations exist at the entity, none under the requested facet values; \"role_incompatible\" means the role is real, and the StatVar does not declare it; \"role_signature_incompatible\" means the resolved StatVars carry incompatible role signatures and no partition into candidates was possible; \"source_code_not_held\" means no variable held under the part's source_code by a source search serves can answer the part: no served source holds the code, the part's sources exclude every source that does, or the code's variables cannot answer the part as asked; \"source_code_ambiguous\" means two of the part's sources hold its source_code; \"source_code_shares_variable\" means the source_code's variables answer other codes of its source too, so search cannot serve the code alone; \"qualifier_not_bound\" means the variable resolved to a series family, but a narrowing term the request's text named bound no constraint slot: no code system in the packaged index carries it, or its registered rows landed in no binding" + "description": "why nothing could be returned, in contract resolution order. \"entity_not_resolved\" means a named entity could not be resolved to a graph node; \"entity_ambiguous\" means a named entity matched more than one graph candidate and none could be preferred over the others, distinct from \"entity_not_resolved\", where no node matched at all; \"entity_role_not_admitted\" means a named entity resolved to exactly one graph node, but no role any candidate shape declares admits that node's graph type -- the entity is real, just not the kind of thing this query's data is reported for; \"entity_set_too_large\" means every named entity resolved, but the places the request names, counting the members of each group or region among them and summed over the roles they sit on, exceed what the engine binds in one request -- distinct from every other entity_* reason, where one entity, not the size of the set, is what failed; \"variable_not_resolved\" means no StatVar matched the variable text (e.g. an absent posted stat_var_dcid or entity, or no measure match at all); \"role_not_resolved\" means the query names a role the engine could not resolve; \"unit_not_resolved\" means the unit binder could not classify a token in the requested unit phrase against its lexicons; \"no_matching_slice\" means the measure matched fine, but the requested combination has no corresponding data series -- the constructed/derived variable does not exist in the graph at all. Covers an identity resubmit refine edit with no confirmable sibling StatVar for the edited slice, and a dev-finance scheme x purpose x recipient combination that was never published as a series, on raw-text and resubmit alike; \"binding_mismatch\" means the variable resolved and graph-confirmed StatVars exist, but none satisfies the requested slot bindings, either because a resolved value on a bound property mismatched or because the StatVar's value on a bound property is present but could not be read (an unresolvable dcid); distinct from \"no_matching_slice\" (the combination was never published at all) and \"variable_not_resolved\" (no StatVar matched at all); \"denominator_not_available\" means the query asks for a normalised form (per person, per area, a rate or a share) or names a denominator, and the matched series is not in that form or divides by another base; \"no_observations\" means a StatVar WAS confirmed to exist but has no observation at the resolved entity (it exists, but not data here); \"facet_not_available\" means observations exist at the entity, none under the requested facet values; \"role_incompatible\" means the role is real, and the StatVar does not declare it; \"role_signature_incompatible\" means the resolved StatVars carry incompatible role signatures and no partition into candidates was possible; \"source_code_not_held\" means no variable held under the part's source_code by a source search serves can answer the part: no served source holds the code, the part's sources exclude every source that does, or the code's variables cannot answer the part as asked; \"source_code_ambiguous\" means two of the part's sources hold its source_code; \"source_code_shares_variable\" means the source_code's variables answer other codes of its source too, so search cannot serve the code alone; \"qualifier_not_bound\" means the variable resolved to a series family, but a narrowing term the request's text named bound no constraint slot: no code system in the packaged index carries it, or its registered rows landed in no binding; \"timed_out\" means the request reached its time limit before this part was answered (diagnostics.timed_out is true); the question may hold data, so asking it again, alone or narrower, can answer it" }, "cause": { "anyOf": [ @@ -10545,7 +10587,7 @@ "absent" ], "title": "Category", - "description": "derived from reason, never independently settable: \"entity_not_resolved\", \"entity_ambiguous\", \"entity_set_too_large\", \"entity_role_not_admitted\", \"variable_not_resolved\", \"role_not_resolved\", \"source_not_resolved\", \"source_ambiguous\", \"source_code_not_held\", \"source_code_ambiguous\", \"source_code_shares_variable\", and \"unit_not_resolved\" are \"unresolved\" (the request could not be read into the graph); every other code is \"absent\" (the read request names a place holding nothing)", + "description": "derived from reason, never independently settable: \"entity_not_resolved\", \"entity_ambiguous\", \"entity_set_too_large\", \"entity_role_not_admitted\", \"variable_not_resolved\", \"role_not_resolved\", \"source_not_resolved\", \"source_ambiguous\", \"source_code_not_held\", \"source_code_ambiguous\", \"source_code_shares_variable\", \"unit_not_resolved\", and \"timed_out\" are \"unresolved\" (the request could not be read into the graph); every other code is \"absent\" (the read request names a place holding nothing)", "default": "absent" }, "message": { @@ -10846,6 +10888,14 @@ ], "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." }, + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity text of `restatement`, once per text in restatement order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, "operations": { "items": { "$ref": "#/components/schemas/Operation" @@ -15233,7 +15283,8 @@ "facet_not_available", "role_incompatible", "role_signature_incompatible", - "qualifier_not_bound" + "qualifier_not_bound", + "timed_out" ] }, { @@ -18845,6 +18896,14 @@ ], "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." }, + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity text of `restatement`, once per text in restatement order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, "operations": { "items": { "$ref": "#/components/schemas/Operation" diff --git a/tools/README.md b/tools/README.md index 6fe2b93..6e4fb59 100644 --- a/tools/README.md +++ b/tools/README.md @@ -38,7 +38,7 @@ uv run tools/validate_provenance_docs_vectors.py uv run tools/validate_descriptions_vectors.py ``` -`validate_client_contract.py` validates the client contract under `python/client-contract/src/dfo_client_contract/` against its schemas, then checks what they cannot express: every `strict-fields.json` pointer resolves in `served/openapi.json` and stays required and non-nullable, or keeps its enum values; `actions.json` holds one row, in code order, for each active refusal code in `registries/codes.json` that reaches a problem document or a no_data reason, with a gap kind exactly for the no_data reasons; `client-codes.json` lists each code a client raises itself once, in code order, none of them a code in `actions.json` or the registry, each with a class a scenario names and a retryable flag; `proxy-codes.json` and `warning-codes.json` list their codes once, in code order, apart from every other table, and the warning codes are those the client rules issue; `served/openapi.json` holds the Search, Datasets, Graph and Presentation surfaces and nothing outside them but the platform's `/codes` route; each recorded scenario's requests match a served route and its JSON bodies validate against that route's schemas, where a required member stays required when it admits null; every problem document in a scenario, synthetic ones and failed operations' errors included, carries an active code registered at its status, and every website proxy body a code `proxy-codes.json` lists at its status; each recorded scenario names `served/SOURCE.json`'s commit; each scenario's `expect` equals the outcomes its steps reach over its exchanges, with refusals' error classes and gap kinds from `actions.json`, each error the client raises itself carrying its code and class from `client-codes.json`, a repeated refused request counted a retry only where the retry rules allow one, a record that stops retrying while a retry remains refused, and the waits before retries and the warnings response headers issue derived; each POST carries its body, each build posts the body its spec, narrowing and layout give, each Search request posts the whole body its steps derive, each poll names the operation the client holds, and each signed download is the URL its redirect names; each body file a record names is a bare file name in `scenarios/` and no symlink; every absolute URL a record holds is a signed URL on the storage host with the redacted query, or a `location` under the base URL; and each `DatasetRef` example gets the verdict it states. It does not import `dfo_client_contract`, whose `tests/test_rules.py` replays the rule vectors. Also a PEP 723 script: +`validate_client_contract.py` validates the client contract under `python/client-contract/src/dfo_client_contract/` against its schemas, then checks what they cannot express: every `strict-fields.json` pointer resolves in `served/openapi.json` and stays required and non-nullable, or keeps its enum values; `actions.json` holds one row, in code order, for each active refusal code in `registries/codes.json` that reaches a problem document or a no_data reason, with a gap kind exactly for the no_data reasons; `client-codes.json` lists each code a client raises itself once, in code order, none of them a code in `actions.json` or the registry, each with a class a scenario names and a retryable flag; `proxy-codes.json` and `warning-codes.json` list their codes once, in code order, apart from every other table, and the warning codes are those the client rules issue; `served/openapi.json` holds the Search, Datasets, Graph and Presentation surfaces and nothing outside them but the platform's `/codes` route; each recorded scenario's requests match a served route and its JSON bodies validate against that route's schemas, where a required member stays required when it admits null; every problem document in a scenario, synthetic ones and failed operations' errors included, carries an active code registered at its status or a code `proxy-codes.json` lists at its status, and one with a proxy code is `application/problem+json` with the common members, its own status and `retryable` true; no 202 in a scenario reads `done`; each recorded scenario names `served/SOURCE.json`'s commit; each scenario's `expect` equals the outcomes its steps reach over its exchanges, with refusals' error classes and gap kinds from `actions.json`, each error the client raises itself carrying its code and class from `client-codes.json`, a repeated refused request counted a retry only where the retry rules allow one, a record that stops retrying while a retry remains refused, and the waits before retries and the warnings response headers issue derived; each POST carries its body, each build posts the body its spec, narrowing and layout give, each Search request posts the whole body its steps derive, each poll names the operation the client holds, and each signed download is the URL its redirect names; each body file a record names is a bare file name in `scenarios/` and no symlink; every absolute URL a record holds is a signed URL on the storage host with the redacted query, or a `location` under the base URL; and each `DatasetRef` example gets the verdict it states. It does not import `dfo_client_contract`, whose `tests/test_rules.py` replays the rule vectors. Also a PEP 723 script: ```bash uv run tools/validate_client_contract.py diff --git a/tools/capture_client_contract.py b/tools/capture_client_contract.py index c7da7e9..b232ab8 100644 --- a/tools/capture_client_contract.py +++ b/tools/capture_client_contract.py @@ -1872,29 +1872,47 @@ def _refusal( body: dict[str, Any], headers: Mapping[str, str] | None = None, ) -> dict[str, Any]: - """An exchange answering `request` with a refusal: a problem document, or - the website proxy's own `{error, retry, detail}` JSON.""" - media = "application/json" if "error" in body else "application/problem+json" + """An exchange answering `request` with the problem document `body`.""" return { "request": copy.deepcopy(request), "response": { "status": status, - "headers": {"content-type": media, **(headers or {})}, + "headers": {"content-type": "application/problem+json", **(headers or {})}, "json": body, }, } -_PROXY_RATE_LIMITED = { - "error": "rate_limited", - "retry": "retry_after_delay", - "detail": "Too many requests from this address. Try again shortly.", -} -_PROXY_UNAVAILABLE = { - "error": "transient_unavailable", - "retry": "retry_after_delay", - "detail": "The Search API is unreachable.", -} +# The trace id of the website proxy's own refusals, which it also sends in +# the x-dfo-trace-id header. +_PROXY_TRACE_ID = "7" * 32 + + +def _proxy_problem(code: str, status: int, title: str, detail: str) -> dict[str, Any]: + """A problem document the website proxy answers itself. It has the common + members with `retryable` true, and no `capability_version`, which only + dfo-apis sends.""" + return { + "type": f"/codes/{code}", + "title": title, + "status": status, + "detail": detail, + "code": code, + "trace_id": _PROXY_TRACE_ID, + "retryable": True, + } + + +_PROXY_HEADERS = {"cache-control": "no-cache", "x-dfo-trace-id": _PROXY_TRACE_ID} +_PROXY_RATE_LIMITED = _proxy_problem( + "rate_limited", + 429, + "Too Many Requests", + "Too many requests: 120 per window per address. Try again in 2s.", +) +_PROXY_UNAVAILABLE = _proxy_problem( + "transient_unavailable", 502, "Bad Gateway", "The Search API is unreachable." +) @dataclass(frozen=True) @@ -1963,7 +1981,10 @@ def _retry_after_503(parent: dict[str, Any], ctx: Context) -> Derived: def _proxy_429(parent: dict[str, Any], ctx: Context) -> Derived: first = parent["exchanges"][0] refused = _refusal( - first["request"], 429, dict(_PROXY_RATE_LIMITED), {"retry-after": "2"} + first["request"], + 429, + dict(_PROXY_RATE_LIMITED), + {**_PROXY_HEADERS, "retry-after": "2"}, ) return _refused_first(parent, 0, refused) @@ -1971,9 +1992,10 @@ def _proxy_429(parent: dict[str, Any], ctx: Context) -> Derived: def _proxy_502(parent: dict[str, Any], ctx: Context) -> Derived: first = parent["exchanges"][0] refused = [ - _refusal(first["request"], 502, dict(_PROXY_UNAVAILABLE)) for _ in range(3) + _refusal(first["request"], 502, dict(_PROXY_UNAVAILABLE), _PROXY_HEADERS) + for _ in range(3) ] - error = refusal_error(502, _PROXY_UNAVAILABLE, ctx.actions).outcome( + error = refusal_error(502, _PROXY_UNAVAILABLE, ctx.actions, _PROXY_HEADERS).outcome( ctx.client_codes ) return Derived( @@ -2371,6 +2393,36 @@ def _poll_rate_limited(exchanges: list[dict[str, Any]], build: dict[str, Any]) - build["poll_waits"].insert(1, 3.0) +def _accepted_running(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """The 202 reads running where the recording reads pending. The polls and + the outcome are the recording's.""" + exchanges[0]["response"]["json"]["operation"]["status"] = "running" + + +# The retry_after_ms each poll that finds the build running reads in +# fetch-spec-poll-pacing-changes. The values go up, up again, then down. +_CHANGING_PACING_MS = (2500, 4000, 1000) + + +def _pacing_changes(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """Each poll that finds the build running reads its own retry_after_ms + from _CHANGING_PACING_MS, and the wait before the next poll is that + poll's value.""" + running = [ + e["response"]["json"]["operation"] + for e in exchanges[_poll_index(exchanges) :] + if e["request"].get("path", "").startswith("/datasets/operations/") + and e["response"]["json"]["operation"]["status"] == "running" + ] + require( + len(running) == len(_CHANGING_PACING_MS), + f"{len(_CHANGING_PACING_MS)} polls find the build running", + ) + for operation, ms in zip(running, _CHANGING_PACING_MS, strict=True): + operation["retry_after_ms"] = ms + build["poll_waits"][1:] = [ms / 1000 for ms in _CHANGING_PACING_MS] + + def _operation_failed(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: """The first poll answers the operation failed with a retryable operation_failed, and the build is posted again and runs as recorded. The @@ -3415,19 +3467,21 @@ def _empty_narrowing(parent: dict[str, Any], ctx: Context) -> Derived: Synthetic( "search-proxy-rate-limited", "search-place-ambiguous", - "The website proxy's own 429 {error, retry, detail} with Retry-After 2 answers the first search.", - "The proxy's 429 body carries no code or retryable: error is the code and retry " - '"retry_after_delay" makes it retryable, so the client waits the Retry-After seconds, ' - "retries, and reaches the same answer.", + "The website proxy's own 429 rate_limited problem document with Retry-After 2 answers " + "the first search.", + "The proxy's 429 is a problem document like any other refusal: rate_limited has no " + "row in actions.json, so it is a RateLimitError by its status, and retryable true makes " + "the client wait the Retry-After seconds, retry, and reach the same answer.", _proxy_429, ), Synthetic( "search-proxy-unavailable", "search-place-ambiguous", - "The website proxy's own 502 {error, retry, detail} answers the search and both retries.", - "The proxy's 502 body is retryable through its retry member and has no Retry-After, so " - "the client backs off and retries twice, then raises ServerError with the error member, " - "transient_unavailable, as its code.", + "The website proxy's own 502 transient_unavailable problem document answers the search " + "and both retries.", + "The proxy's 502 problem document says retryable true and has no Retry-After, so the " + "client backs off and retries twice, then raises ServerError, the class of its status, " + "with its code, transient_unavailable, and its trace id.", _proxy_502, ), Synthetic( @@ -3591,6 +3645,25 @@ def _empty_narrowing(parent: dict[str, Any], ctx: Context) -> Derived: "none, and downloads the done manifest's file.", _async_fetch(), ), + Synthetic( + "fetch-spec-accepted-running", + "mint-async-build", + "As fetch-spec-async-build, with the 202 reading running where it read pending.", + "A 202 reads pending or running: the client polls either as an operation still " + "under way, with the same pacing, and downloads the done manifest's file.", + _async_fetch(_accepted_running), + ), + Synthetic( + "fetch-spec-poll-pacing-changes", + "mint-async-build", + "As fetch-spec-async-build, with the polls that find the build running reading " + "retry_after_ms 2500, 4000 and 1000 where the recording reads 1500.", + "Before each poll the client waits the retry_after_ms of the last operation " + "resource it read: 1.5 seconds from the 202, then 2.5, 4 and 1 from the polls. A " + "client that keeps the 202's value, or reads the Retry-After header in its place, " + "waits otherwise.", + _async_fetch(_pacing_changes), + ), Synthetic( "fetch-spec-poll-rate-limited", "mint-async-build", diff --git a/tools/tests/test_validate_client_contract.py b/tools/tests/test_validate_client_contract.py index fd00276..89a9859 100644 --- a/tools/tests/test_validate_client_contract.py +++ b/tools/tests/test_validate_client_contract.py @@ -309,12 +309,37 @@ def _never_retried(doc: Any) -> None: def _proxy_code(code: str) -> Callable[[Any], None]: def change(doc: Any) -> None: for exchange in doc["exchanges"]: - exchange["response"]["json"]["error"] = code + exchange["response"]["json"]["code"] = code doc["expect"][0]["error"]["code"] = code return change +def _proxy_responses(change: Callable[[Any], None]) -> Callable[[Any], None]: + """`change` edits every response of a proxy scenario.""" + + def edit(doc: Any) -> None: + for exchange in doc["exchanges"]: + change(exchange["response"]) + + return edit + + +def _proxy_old_body(doc: Any) -> None: + """The proxy's 502s carry the `{error, retry, detail}` JSON body it sent + before its refusals became problem documents, with no trace id, and the + step expects `error` read as the code. A client reads that body as one + without a code.""" + for exchange in doc["exchanges"]: + exchange["response"]["headers"] = {"content-type": "application/json"} + exchange["response"]["json"] = { + "error": "transient_unavailable", + "retry": "retry_after_delay", + "detail": "The Search API is unreachable.", + } + doc["expect"][0]["error"]["trace_id"] = None + + def _search_posts(change: Callable[[Any], None]) -> Callable[[Any], None]: return lambda doc: change(doc["exchanges"][0]["request"]["json"]) @@ -1173,13 +1198,37 @@ def change(doc: Any) -> None: ( "scenarios/search-proxy-unavailable.json", _proxy_code("made_up_code"), - "proxy code 'made_up_code' is not a code proxy-codes.json lists", + "problem code 'made_up_code' is not in the registry", + ), + ( + "scenarios/search-proxy-unavailable.json", + _proxy_old_body, + "step 0 expects", ), ( "scenarios/search-proxy-unavailable.json", _proxy_code("rate_limited"), "lists with status 502", ), + ( + "scenarios/search-proxy-unavailable.json", + _proxy_responses(lambda response: response["json"].pop("retryable")), + "a proxy problem document is not retryable: true", + ), + ( + "scenarios/search-proxy-rate-limited.json", + _proxy_responses( + lambda response: response["headers"].update( + {"content-type": "application/json"} + ) + ), + "a proxy problem document is not application/problem+json", + ), + ( + "scenarios/fetch-spec-accepted-running.json", + _set_body(0, lambda body: body["operation"].update(status="done")), + "exchange 0: a 202's operation reads done", + ), ( "proxy-codes.json", _add_action({"code": "spec_not_found", "status": 404, "condition": "x"}), @@ -1438,9 +1487,9 @@ def change(doc: Any) -> None: ( "scenarios/search-proxy-unavailable.json", lambda doc: doc["exchanges"][0]["response"]["json"].update( - error=["transient_unavailable"] + code=["transient_unavailable"] ), - "proxy code ['transient_unavailable'] is not a code", + "problem code ['transient_unavailable'] is not in the registry", ), ( _FETCH, @@ -1622,7 +1671,7 @@ def change(doc: Any) -> None: "strict-enum-value-gone", "strict-pointer-repeated", "action-row-missing", - "action-row-timed-out-missing", + "action-row-no-data-reason-missing", "action-row-for-a-warning", "action-row-for-an-unknown-code", "actions-unsorted", @@ -1747,7 +1796,11 @@ def change(doc: Any) -> None: "search-without-schema-version", "step-timeout", "proxy-code-unlisted", + "proxy-old-body-reads-without-code", "proxy-code-wrong-status", + "proxy-problem-without-retryable", + "proxy-problem-in-plain-json", + "accepted-operation-reads-done", "proxy-code-is-a-registry-code", "warning-code-ref-digest-changed-missing", "warning-code-missing", diff --git a/tools/validate_client_contract.py b/tools/validate_client_contract.py index 44ac99f..604ba3b 100644 --- a/tools/validate_client_contract.py +++ b/tools/validate_client_contract.py @@ -35,7 +35,8 @@ - `proxy-codes.json` and `warning-codes.json` list codes in order, each once, none of them a code another table or `registries/codes.json` holds, and the warning codes are those the client rules issue: `ref_digest_changed`, - `route_deprecated`, `server_warning`, and one `key_` per key-format reason. + `route_deprecated`, `server_warning`, and one `key_` per key-format + reason. - Each scenario's file name matches its `name`, names are unique, `expect` holds one outcome per step, a step that acts on an earlier result follows one, a synthetic scenario derives from a recorded one, and every body file @@ -46,8 +47,10 @@ route's schema for its status, a required member included when it admits null, and its `origin.dfo_commit` is `served/SOURCE.json`'s commit. In every scenario a problem document's `code`, a failed operation's error - included, is an active code registered with its status, and the website - proxy's `error` a code `proxy-codes.json` lists with its status. + included, is an active code registered with its status or a code + `proxy-codes.json` lists with its status. A document with a proxy code is + `application/problem+json` and carries PROXY_PROBLEM_MEMBERS, its own + status and `retryable` true, and no 202's operation reads `done`. - Each error a scenario expects, other than a `SearchWarning` or `DataWarning`, carries a refusal's code from its exchanges, a failed operation's included, or a client code of its class. @@ -668,25 +671,23 @@ def _check_problem_code( registry: dict[str, Any], proxy_codes: Mapping[str, Mapping[str, Any]], ) -> list[str]: - """A refusal's code: a problem document's is an active registry code - registered with its status, and the website proxy's `error` is a code - `proxy-codes.json` lists with its status.""" + """A problem document's code: an active registry code registered with its + status, or a code of the website proxy's own refusals that + `proxy-codes.json` lists with its status, in a proxy problem document.""" body = response.get("json") - if response["status"] < 400 or not isinstance(body, dict): + if response["status"] < 400 or not isinstance(body, dict) or "code" not in body: return [] - if "code" not in body: - if "error" not in body: - return [] - error = body["error"] - row = proxy_codes.get(error) if isinstance(error, str) else None - if row is None or row["status"] != response["status"]: + code = body["code"] + proxy_row = proxy_codes.get(code) if isinstance(code, str) else None + if proxy_row is not None: + if proxy_row["status"] != response["status"]: return [ ( - f"{label}: proxy code {body['error']!r} is not a code " + f"{label}: proxy code {code!r} is not a code " f"proxy-codes.json lists with status {response['status']}" ) ] - return [] + return _check_proxy_problem(label, response) for entry in registry["entries"]: if entry["code"] != body["code"]: continue @@ -706,6 +707,43 @@ def _check_problem_code( return [f"{label}: problem code {body['code']!r} is not in the registry"] +def _check_accepted(label: str, response: Mapping[str, Any]) -> list[str]: + """A 202's operation does not read `done`, because a submission that finds a + done operation builds it again.""" + body = response.get("json") + operation = body.get("operation") if isinstance(body, dict) else None + if response["status"] != 202 or not isinstance(operation, dict): + return [] + if operation.get("status") == "done": + return [f"{label}: a 202's operation reads done"] + return [] + + +# The members every problem document the website proxy answers itself carries. +PROXY_PROBLEM_MEMBERS = ("type", "title", "status", "detail", "code", "trace_id") +PROXY_PROBLEM_MEDIA = "application/problem+json" + + +def _check_proxy_problem(label: str, response: Mapping[str, Any]) -> list[str]: + """A proxy problem document is `application/problem+json`, has the common + members, carries the response's status, and has `retryable` true.""" + body = response["json"] + problems = [] + content_type = response.get("headers", {}).get("content-type", "") + if content_type.split(";", maxsplit=1)[0].strip().lower() != PROXY_PROBLEM_MEDIA: + problems.append( + f"{label}: a proxy problem document is not {PROXY_PROBLEM_MEDIA}" + ) + missing = [m for m in PROXY_PROBLEM_MEMBERS if m not in body] + if missing: + problems.append(f"{label}: a proxy problem document lacks {missing}") + if "status" in body and body["status"] != response["status"]: + problems.append(f"{label}: a proxy problem document's status is not its own") + if body.get("retryable") is not True: + problems.append(f"{label}: a proxy problem document is not retryable: true") + return problems + + # --- outcomes --------------------------------------------------------------- # # A client's outcome for each step follows from the exchanges and from @@ -741,8 +779,6 @@ def _check_problem_code( } # The statuses a refusal is retried on when its body does not say. RETRYABLE_STATUSES = frozenset({408, 429, 500, 502, 503, 504}) -# The website proxy's `retry` value that makes its refusal retryable. -_PROXY_RETRY = "retry_after_delay" # The retries a client makes by default after a retryable refusal. MAX_RETRIES = 2 # The status that cuts a synchronous build off at the server's limit. @@ -768,8 +804,7 @@ def may_retry( return not (build and any(r["status"] == BUILD_CUT_OFF for r in earlier)) -# The content types a client reads a refusal's body as a problem document, or -# the website proxy's own body, in. +# The content types a client reads a refusal's body as a problem document in. PROBLEM_MEDIA = ("application/problem+json", "application/json") @@ -787,11 +822,10 @@ def gap_kinds(actions: Mapping[str, Mapping[str, Any]]) -> dict[str, str]: def refusal_code(body: Any) -> str | None: - """A refusal's code: a problem document's `code`, or the `error` member - of the website proxy's own `{error, retry, detail}` body.""" + """A refusal's code: its problem document's `code`.""" if not isinstance(body, dict): return None - code = body.get("code", body.get("error")) + code = body.get("code") return code if isinstance(code, str) else None @@ -808,13 +842,10 @@ def error_class( def retryable(status: int, body: Any) -> bool: - """Whether a client retries a refusal: as a problem document's `retryable` - says, or the website proxy's `retry`, and otherwise by its status.""" - if isinstance(body, dict): - if "code" not in body and "error" in body: - return body.get("retry") == _PROXY_RETRY - if isinstance(body.get("retryable"), bool): - return body["retryable"] + """Whether a client retries a refusal: as its problem document's + `retryable` says, and otherwise by its status.""" + if isinstance(body, dict) and isinstance(body.get("retryable"), bool): + return body["retryable"] return status in RETRYABLE_STATUSES @@ -3085,6 +3116,7 @@ def _check_scenarios( label, exchange["response"], registry, proxy_codes ) ) + problems.extend(_check_accepted(label, exchange["response"])) for resource in _failed_operations(record): error = resource.get("error") status = error.get("status") if isinstance(error, dict) else None