From 7c4a15a5267639e2366a7d367b8c6c0ce94e601a Mon Sep 17 00:00:00 2001 From: Samuel Letellier-Duchesne Date: Fri, 4 Sep 2026 16:03:01 -0400 Subject: [PATCH] Adopt governance-2026.12 The level carrying SchemaBundle.loadProse and SchemaBundle.prose, the pair that lets a consumer of the shared name reach the schema prose. The naming map gains their two rows; the parity page moves only the tag it names, since this level adds no capability. Both pages are regenerated, not edited. conformance-2026.8, docs-2026.1 and the library level do not move. --- docs/explanation/naming-map.md | 44 ++++++++++++++++++++++++++++++++-- docs/explanation/parity.md | 4 ++-- pyproject.toml | 2 +- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/docs/explanation/naming-map.md b/docs/explanation/naming-map.md index 63e4de7..1ccd31d 100644 --- a/docs/explanation/naming-map.md +++ b/docs/explanation/naming-map.md @@ -80,8 +80,8 @@ ledger, where permanent single-language capabilities are recorded as such. Generated from -[`governance/naming.toml`](https://github.com/idfkit/idfkit-conformance/blob/governance-2026.11/governance/naming.toml) -at `governance-2026.11`, the governance tag this release pins. It governs `idfkit` and +[`governance/naming.toml`](https://github.com/idfkit/idfkit-conformance/blob/governance-2026.12/governance/naming.toml) +at `governance-2026.12`, the governance tag this release pins. It governs `idfkit` and `@idfkit/core` and `@idfkit/weather` and `@idfkit/language`, and it is read at a pinned governance-YYYY.N tag of idfkit-conformance, never the default branch. Correct the register and regenerate; a correction made on this page would be overwritten, and it @@ -258,6 +258,8 @@ row marked divergent or excluded links to the entry that says why, and a cell re | Concept | Python | TypeScript | Kind | | ------- | ------ | ---------- | ---- | | load a schema for a version | `get_schema` | `SchemaBundle.load` | [divergent](#load-a-schema-for-a-version) | +| load the schema prose | *absent* | `SchemaBundle.loadProse` | [divergent](#load-the-schema-prose) | +| the schema prose already loaded | *absent* | `SchemaBundle.prose` | [divergent](#the-schema-prose-already-loaded) | | the supported version list | `ENERGYPLUS_VERSIONS` | `SchemaBundle.versions` | [divergent](#the-supported-version-list) | | resolve a version string | `find_closest_version` | `resolveVersion` | [divergent](#resolve-a-version-string) | @@ -1600,6 +1602,44 @@ bundler-driven app resolves it through `import()`, so the caller constructs a the object that owns the source because there is no process-wide source that would let it be a free function. This is the input and output divergence recorded above. +### Load the schema prose + +| Python | TypeScript | +| ------ | ---------- | +| *absent* | `SchemaBundle.loadProse` | + +JavaScript deduplicates every memo and note of all seventeen schemas into one side file +the manifests carry indices into, and reads it on demand. Python has no counterpart +because it needs none: it ships the full schemas on disk and reads `note` and `memo` +straight off the field record it already holds, so there is nothing to load and no +moment at which to load it. + +The same divergence as `SchemaBundle.load` against `get_schema`, and for the same +reason. The prose is roughly 175 KB the parse path never touches, and a reader who only +parses a model should not pay for a sentence of English. Keeping the fetch separate is +what lets the parse path stay unaware the pool exists. + +Not a capability difference: `describe_object_type` reports the same prose in both +languages, and the corpus compares a digest over every memo and note of all 858 types. +Only the moment of loading differs. + +### The schema prose already loaded + +| Python | TypeScript | +| ------ | ---------- | +| *absent* | `SchemaBundle.prose` | + +The synchronous half of `SchemaBundle.loadProse`, and the counterpart of +`SchemaBundle.loaded`. Python needs neither: its prose is on the record it already +holds. + +It exists because every reader of prose in JavaScript is synchronous. +`describeObjectType` takes a pool rather than fetching one, and every answer in +`@idfkit/language` is a pure function so an editor server can answer a cursor without +holding a thread. A consumer loads once when a document arrives and reads here on the +request path. Without the pair it would either await inside a path it keeps synchronous +or build a second cache beside the one the bundle already has. + ### The supported version list | Python | TypeScript | diff --git a/docs/explanation/parity.md b/docs/explanation/parity.md index 29dd3bd..5a37e6f 100644 --- a/docs/explanation/parity.md +++ b/docs/explanation/parity.md @@ -79,8 +79,8 @@ Ids get added and deprecated. They do not get renamed. Generated from -[`governance/parity.toml`](https://github.com/idfkit/idfkit-conformance/blob/governance-2026.11/governance/parity.toml) -at `governance-2026.11`, the governance tag this release pins. Correct the ledger and +[`governance/parity.toml`](https://github.com/idfkit/idfkit-conformance/blob/governance-2026.12/governance/parity.toml) +at `governance-2026.12`, the governance tag this release pins. Correct the ledger and regenerate; a correction made on this page would be overwritten, and it would never reach either library's CI gate. diff --git a/pyproject.toml b/pyproject.toml index 01feeb9..9520b90 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,7 +71,7 @@ level = "conformance-2026.8" # idfkit-conformance. Read by docs/hooks/parity_macro.py, scripts/render_parity_page.py and # scripts/render_naming_map.py through the duplicated scripts/_governance_source.py. [tool.idfkit.governance] -level = "governance-2026.11" +level = "governance-2026.12" # Documentation artifact level the TypeScript half of the site renders from, as an immutable tag # in idfkit-js. It carries the TypeScript examples the pages include and the TypeDoc JSON the