v0.11.0 - Public API surface, naming cleanup, and generated documentation
This release draws the line between the toolbox's public API and its internals as preparation for a stable release (v1.0.0). Many function names are changed to be clearer, and functions are moved across public/internal namespaces. Nothing forwards from the old names, so read the migration guide before upgrading; it lists every old name and its replacement. The tutorials and the README's Getting Started are now generated from the live scripts, so they cannot drift from the code again.
Added
- Type introspection is public, as
openminds.introspection.MetaTypewith the cached lookupsfromInstanceandfromClassName. It answers whether a property holds one value or many, links to another node, embeds one, or accepts several types (#139). openminds.interface.LinkResolver.isTypeKnown, so a resolver can tell a reference whose type is known from one that has to be replaced, without naming an internal class (#142).serializeaccepts serialization options directly, including a newPropertyFilterthat emits only the named properties, for partial writes (#147).- A migration guide for this release, under
docs/migration(#160). - A workflow that runs the live scripts as tests and, if they pass, exports them and splices the Getting Started section into the README (#159, #173, #174).
Changed
- The base class of every type is
openminds.Node, at the top of the namespace, and the classes built on it live inopenminds.base, named by role:Visitor,Transformer,Serializer,Deserializer,ControlledTerm,MixedTypeSet(#124). - One home and one phrasing for constants and model versions:
openminds.selectModelVersion,openminds.mustBeValidModelVersion,openminds.constant.BaseIRI(#123, #125). - "IRI" everywhere the code meant an IRI, and the small renames that go with it:
getUnresolvedLinkIdentifiers,buildDocuments,postProcessDocuments,getTypeIRI(#125). - Generated classes live under
code/generated/resources, one folder per model version, and the controlled-term base class is generated with them (#150). The per-version README and Contents files are generated too (#157). - Everything hand-written ships from
code/+openminds; thecode/internalfolder is gone. A clone set up withsetup.mbefore this release has the old folder saved in its path and warns once at startup — runsetup.magain (#135). Node.isReferenceis advertised rather than hidden; it is the canonical way to ask whether an instance stands for a node (#146).- A quantitative value range displays as one label, and the elements of an object array are numbered so a line can be matched to its index (#126).
- The README is rewritten around what the toolbox is now, and the live script it generates its examples from now describes a mouse and its state at recording, saved and loaded as JSON-LD (#159).
Deprecated
isUnresolvedremains deprecated in favour ofisReference, warning once per session. It is removed in v1.0.0.
Removed
- The old names of everything renamed above.
openminds.abstractandopenminds.internal.abstractno longer exist; the guide has the full list. openminds.constant.LATEST_VERSION; useopenminds.getModelVersion(#123).openminds.abstract.ControlledTermBase; the base is now generated per model version (#150).openminds.utility.isEmbeddedType; useopenminds.introspection.fromClassName(type).isPropertyWithEmbeddedType(property)(#121).openminds.enum.Types.create, a documented alias ofcreateInstance(#121).
Fixed
serializeacceptedRecursionDepthandIncludeIdentifierand silently ignored both; they now take effect (#147).- An empty linked or mixed-type property kept its
[None] (Any of: …)display when hotlinks are off, as in a headless session or an exported live script, instead of falling back to[1x0 ClassName](#176). - Exported documentation is refused if the live script emitted a warning, and the export no longer depends on the machine it runs on (#174).
- Packaging the toolbox locally works again; the task did not name its source folder (#158).
Documentation
- The members public classes inherit from internal ones are documented on the public class, and
help openminds.Nodenow describes the class (#141). - The instance events and the four properties of their payload are documented as a contract (#137, #143).
getMixedTypeForPropertysays what its result is for (#144).
Internal
- Misleading and dead internal names removed, and "type" used where the internals meant an openMINDS type rather than a schema file (#121, #122).
- Release notes are grouped by label (#134).
All merged pull requests
What's Changed
Breaking changes
- refactor: one home for constants, one phrasing for model versions by @ehennestad in #123
- refactor: openminds.Node at top level, base classes in openminds.base by @ehennestad in #124
- refactor: say IRI everywhere, and finish the small naming leftovers by @ehennestad in #125
- Keep generated classes under code/generated/resources and generate the controlled term abstract class by @ehennestad in #150
Added
- refactor: promote type introspection to openminds.introspection by @ehennestad in #139
- feat: add LinkResolver.isTypeKnown so implementers stop naming an internal class by @ehennestad in #142
- refactor: advertise Node.isReference by @ehennestad in #146
- feat: make serialization options reach the serializer, and add PropertyFilter by @ehennestad in #147
Changed
- Improve instance display for value ranges and object arrays by @ehennestad in #126
Documentation
- docs: document Node's instance events instead of advertising their removal by @ehennestad in #137
- docs: document the members public classes inherit from internal ones by @ehennestad in #141
- docs: write down the contract of the instance event payload by @ehennestad in #143
- docs: say what getMixedTypeForProperty returns and what not to do with it by @ehennestad in #144
Internal
- refactor: rename misleading internal functions and remove dead ones by @ehennestad in #121
- refactor: say "type" where internals meant the openMINDS type, not a schema file by @ehennestad in #122
- refactor: fold code/internal into code/+openminds by @ehennestad in #135
- Drop the readme and contents sources the pipeline now generates by @ehennestad in #157
Other changes
- fix: pass the source folder name when packaging locally by @ehennestad in #158
- docs: add migration notes for v0.11.0 by @ehennestad in #160
- ci: group auto-generated release notes by label by @ehennestad in #134
- docs: rewrite the README and generate its Getting Started from the live script by @ehennestad in #159
- ci: push exported documentation with the deploy key by @ehennestad in #173
- ci: give the export a user folder, and refuse output that captured a warning by @ehennestad in #174
- fix: keep the "[None] (Any of: …)" display when hotlinks are off by @ehennestad in #176
Full Changelog: v0.10.0...v0.11.0