@openmixer/omx-contract 2.10.0 → 2.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,7 +49,7 @@ pkg-config --cflags omx-contract
49
49
  ```
50
50
 
51
51
  Pin one version and build against its renders instead of keeping a copy: the installed package at exactly
52
- that version (`pkg-config --exact-version=2.10.0 omx-contract`), else the npm tarball, unpacked, and
52
+ that version (`pkg-config --exact-version=2.10.1 omx-contract`), else the npm tarball, unpacked, and
53
53
  `omx-contract render --target c --out build/omx-contract/include`. A kernel's controls and readouts, in their
54
54
  order, are in `share/omx-contract/omx-contract.json`; how a declaration is written is in
55
55
  [docs/kernel-files.md](docs/kernel-files.md), and what a readout is in [docs/readouts.md](docs/readouts.md).
package/lib/semver.mjs CHANGED
@@ -23,7 +23,7 @@ const RANK = { none: 0, patch: 1, minor: 2, major: 3 };
23
23
  * The development-phase rule (omx-contract spec §3.6): while every consumer of
24
24
  * omx-contract is a FreeMixer repository named here, removing an item is MINOR. The rule ends, and
25
25
  * this becomes null so a removal is MAJOR again, in the release that names the first consumer
26
- * outside the list.
26
+ * outside the list. Until then a MAJOR class is released as a minor bump (see refusal).
27
27
  */
28
28
  export const DEVELOPMENT_PHASE = Object.freeze({ consumers: Object.freeze(['omx-dsp', 'omx-plugins', 'openmixer']) });
29
29
  const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
@@ -155,9 +155,16 @@ export function bumpOf(from, to) {
155
155
  return 'none';
156
156
  }
157
157
 
158
- /** null when bumping `from` -> `to` covers `level`, else the refusal. */
159
- export function refusal(level, from, to) {
158
+ /**
159
+ * null when bumping `from` -> `to` covers `level`, else the refusal. In the development phase no
160
+ * release takes a major bump (operator ruling 2026-10-13: majors wait for the first public
161
+ * release), so a MAJOR class is covered by a minor bump; the classes are still reported as found.
162
+ */
163
+ export function refusal(level, from, to, { developmentPhase = DEVELOPMENT_PHASE } = {}) {
160
164
  let bump;
161
165
  try { bump = bumpOf(from, to); } catch (e) { return e.message; }
162
- return RANK[bump] >= RANK[level] ? null : `the changes since ${from} are ${level.toUpperCase()}, and ${from} -> ${to} is a ${bump} bump`;
166
+ const need = developmentPhase && level === 'major' ? 'minor' : level;
167
+ if (RANK[bump] >= RANK[need]) return null;
168
+ const phase = need === level ? '' : ' (at least a minor in the development phase)';
169
+ return `the changes since ${from} are ${level.toUpperCase()}, and ${from} -> ${to} is a ${bump} bump${phase}`;
163
170
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmixer/omx-contract",
3
- "version": "2.10.0",
3
+ "version": "2.10.1",
4
4
  "description": "The FreeMixer declarations as data: a JSON Schema, the data, and one CLI that renders them into C, TypeScript and JSON",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-or-later",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmixer/omx-contract",
3
- "version": "2.10.0",
3
+ "version": "2.10.1",
4
4
  "items": {
5
5
  "PAN_RANGE": {
6
6
  "rel": "data/kernels/balance.json",