Skip to content

release: spec-kit a43b89f to main - #51

Merged
jm-rivera merged 10 commits into
mainfrom
release/2026-11-12
Nov 12, 2026
Merged

jm-rivera merged 10 commits into
mainfrom
release/2026-11-12

Conversation

@jm-rivera

Copy link
Copy Markdown
Contributor

Releases spec-kit at a43b89f to main, cut on release/2026-11-12: one pull request.

  • feat: state a converted unit's deflation basis and register the organisation reading codes #50 states whose prices deflated a converted unit. The frame grammar gains DeflationBasis (grammar 1.2.0, written as NGN/constant/2024/donor), and steps and cards carry it in the components catalogue, released as 2026.11.0. The registry registers the organisation reading warning codes, defined by the reading the query states, and the Presentation limit names, and publishes resource_exhausted as correct_and_retry.

dfo-apis' release (DevelopmentFinanceObservatory/apis#289, at 14ad3ba) pins 5589a72, which this branch contains, and dfo-ai moves its pins to the same commit before that release. Merge this first.

Testing: CI passed on #50 and on a43b89f.

A converted unit cell at constant prices gains an optional deflation_basis
(donor, recipient or national): whose prices the conversion deflated the amount
by. Two amounts in one currency and base year with different bases are
different measures, and a reader can now tell them apart. The identity's unit
request still refuses the member, so spec ids do not change. The Arrow recipe
layout carries the basis beside the recipe; layout 1.1.0 frames read and widen
unchanged. FRAME_GRAMMAR_VERSION moves to 1.2.0. The client contract keeps the
basis in the output digest.
…nd cards

A step record's simple_unit and a card's structured_unit gain the same optional
deflation_basis as the frame grammar's converted unit cell, allowed only at
constant prices. comparable_units_required fixtures treat two units that differ
in basis, or a basis beside none, as incomparable, so a card cannot draw
donor-deflated and recipient-deflated amounts on one axis. The catalogue
manifest digests are regenerated.
…on basis

The four component schemas and the steps schema gained an optional deflation_basis, so the catalogue moves to 2026.11.0 and a deployment on 2026.10.0 refuses a unit that carries one. The frame grammar text now names three three-member unit layouts: frame construction gives the frame the recipe layout when some cell carries a recipe or a deflation basis.
…ource_exhausted as correct_and_retry

A resource_exhausted problem body names the limit the request crossed in limit_name, and clients match on its values. registries/limit-names.json lists the seven names the Presentation API states (MAX_SELECTORS, MAX_SERIES_PER_COMPONENT, MAX_LINE_CHART_SERIES, MAX_POINTS_PER_SERIES, MAX_TABLE_ROWS, MAX_ENVELOPE_BYTES, MAX_INTENT_BYTES), with a closed schema, a packaged mirror read as dfo_spec_kit.registry.LIMIT_NAMES, and a CI validator.

The components catalogue publishes resource_exhausted as correct_and_retry, the mode every body for that code states: the caller shrinks the request and retries.
…as TimeGrain is

A type statement makes every pydantic model that types a field with DeflationBasis emit a $defs entry and a $ref, so adopting the grammar's type moved the JSON schema bytes of models whose enum it replaced. A plain alias inlines the enum, and type checkers still check the three values.
search.resolve warns organisation_read_as_source when it reads an organisation the question names after "to" or "from" as the source of the data, and organisation_read_as_party when that source reading finds nothing to answer with and the part is read again with the organisation as a party to the flow.
…earch chooses

Search now chooses an organisation's reading once, before the part's pass, from what it recalls. organisation_read_as_source marks an organisation written after "to" or "from" read as the source of the data where no flow family governs the recall or none lists it as a party. organisation_read_as_party marks an organisation read as a party for one of four reasons: the direction word, another named source that lists it as a party, words that name no single source, or data of its own that does not measure what the question asks.
…wn reading

Search breaks a tie between an organisation's source and party readings by whether the query's reading returned it as an entity, not by a "to" or "from" before its name. organisation_read_as_party's first reason and organisation_read_as_source's opening now state that rule, in registries/codes.json and the bundled mirror.
…ading states

Search breaks a tie between an organisation's source and party readings by whether the query's reading states the organisation's role, not by whether it lists the organisation as an entity. organisation_read_as_party's first reason and organisation_read_as_source's opening now say so, in registries/codes.json, the bundled mirror and the changelog.
…ted-unit-deflation-basis

feat: state a converted unit's deflation basis and register the organisation reading codes
@jm-rivera
jm-rivera merged commit b495367 into main Nov 12, 2026
41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant