From cbde87d220fd56e703107c81e15b9ce711a6bb29 Mon Sep 17 00:00:00 2001 From: Samuel Letellier-Duchesne Date: Fri, 4 Sep 2026 15:54:22 -0400 Subject: [PATCH] Record how JavaScript reaches the schema prose @idfkit/schemas gains SchemaBundle.loadProse and SchemaBundle.prose, so a consumer holding the shared name can obtain the prose pool that describeObjectType and the language service already accept. Two names, both divergent, both recorded here before review rather than after. The divergence is the same one SchemaBundle.load already carries against get_schema, and for the same reason. JavaScript deduplicates every memo and note of all seventeen schemas into one side file the manifests index into, and reads it on demand; Python ships the full schemas on disk and reads note and memo off the record it already holds. There is nothing for Python to load and no moment at which to load it. This is not a capability difference and must not be read as one. 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 in 26.1.0. Only the moment of loading differs, which is what `divergent` is for. The gate does not require these. Its coverage reaches the names an entry point exports at the top level, and a method on an exported class sits outside that, as check-naming-register.mjs says in its own header: caught by review, not by the gate. They are registered because Principle I is about the vocabulary rather than about what the gate can see, and because leaving them out is how a Python counterpart gets added later without anyone noticing the difference was decided. --- governance/naming.toml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/governance/naming.toml b/governance/naming.toml index dc1c483..66ec63e 100644 --- a/governance/naming.toml +++ b/governance/naming.toml @@ -930,6 +930,45 @@ that would let it be a free function. This is the input and output divergence re """ rename_count = { python = 0, typescript = 0 } +[[entry]] +concept = "load the schema prose" +python = "" +typescript = "SchemaBundle.loadProse" +kind = "divergent" +divergence_reason = """ +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. +""" +rename_count = { python = 0, typescript = 0 } + +[[entry]] +concept = "the schema prose already loaded" +python = "" +typescript = "SchemaBundle.prose" +kind = "divergent" +divergence_reason = """ +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. +""" +rename_count = { python = 0, typescript = 0 } + [[entry]] concept = "the supported version list" python = "ENERGYPLUS_VERSIONS"