Skip to content

v0.11.0 - Public API surface, naming cleanup, and generated documentation

Choose a tag to compare

@github-actions github-actions released this 07 Sep 09:56
· 21 commits to main since this release

MATLAB Versions Tested

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.MetaType with the cached lookups fromInstance and fromClassName. 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).
  • serialize accepts serialization options directly, including a new PropertyFilter that 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 in openminds.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; the code/internal folder is gone. A clone set up with setup.m before this release has the old folder saved in its path and warns once at startup — run setup.m again (#135).
  • Node.isReference is 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

  • isUnresolved remains deprecated in favour of isReference, warning once per session. It is removed in v1.0.0.

Removed

  • The old names of everything renamed above. openminds.abstract and openminds.internal.abstract no longer exist; the guide has the full list.
  • openminds.constant.LATEST_VERSION; use openminds.getModelVersion (#123).
  • openminds.abstract.ControlledTermBase; the base is now generated per model version (#150).
  • openminds.utility.isEmbeddedType; use openminds.introspection.fromClassName(type).isPropertyWithEmbeddedType(property) (#121).
  • openminds.enum.Types.create, a documented alias of createInstance (#121).

Fixed

  • serialize accepted RecursionDepth and IncludeIdentifier and 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.Node now describes the class (#141).
  • The instance events and the four properties of their payload are documented as a contract (#137, #143).
  • getMixedTypeForProperty says 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