Skip to content

plugin-hostd 0.7.0: format tables, transforms, the chain verb, the describe verb (J2) - #132

Merged
linuxnow merged 29 commits into
mainfrom
wave/contract-one-pass
Oct 21, 2026
Merged

linuxnow merged 29 commits into
mainfrom
wave/contract-one-pass

Conversation

@linuxnow

Copy link
Copy Markdown
Contributor

J2 J of the contract one-pass batch (FreeMixer/openmixer#2095, #2097, gate #2126). The whole-set gate passed on this tip (run 24, r1: steps 1-7). DRAFT until its predecessors in the merge order are merged and released: omx-contract, plugin-hostd, omx-dsp, omx-clap-core, omx-plugins, plugin-qualify, openmixer; CI here builds against published versions, so it reads red until the train publishes the earlier libraries.

…ed by make install-contract (#126)

The L1 tables (docs/formats.md), kind formatMap: every term of omx-contract's
CLAP and LV2 TERM files and the struct fields and predicates a scan reads,
each one row of one class. CLAP 330 rows, LV2 457.

make install-contract installs them with omx-contract-devel's
install-contract-dir.sh at <contractdir>/3/plugin-hostd/formats/{clap,lv2}.json
with a MANIFEST.json; plugin-hostd-devel and plugin-hostd-dev ship them.

Proof: omx-contract (wave/contract-one-pass 1539b6a) validate --contract-dir
over its own package and these at schema major 2, floor rewritten to the
2.20.0 reader: 131 items in 105 files from 2 packages, valid; one term renamed
furlong: map-term red. omx-contract fmt --check: in the one formatting.
…e test-transforms (#126)

src/transforms.{c,h}: identity, lookup, scale-by, flag, scale-points,
group-path, port-group, each an inbound function and its inverse
(docs/formats.md#the-transforms); transforms_lookup_check refuses a lookup
whose keys or values repeat.

Proof: make test-transforms: 7 transforms, 17 vectors (in, out, back in,
equal) and 18 edges pass, a lookup not one to one refused; group-path's
inverse separator sabotaged: 2 red, restored green.
…age arms (#126)

tests/format_coverage.py, once per format (docs/formats.md#the-coverage-test):
the fields are every term of the installed TERM files plus every row with a
from; per field mapped/extension/dropped, then the counts. Red for a field
with no row, a row covering no field, a word the schema lacks, a transform not
in TRANSFORMS(X), a used TERM dropped, an outbound-read row on another
transform than identity or lookup, a unit row off its TERM's word.

Proof (omx-contract wave/contract-one-pass 1539b6a installed, its TERM files
at schema major 2): make test-format-coverage CONTRACT_SCHEMA_MAJOR=2:
clap 330 fields (mapped 37, extension 271, dropped 22) OK, lv2 457 (62, 346,
49) OK; --self-test: row removed, word misspelt, transform renamed each red
naming the field, both tables green, FORMAT-COVERAGE SELF-TEST OK. By hand: a
used TERM dropped, lv2:toggled on flag, units:db to dBFS, units:pc to a
non-unit: each red.
…for describe (#126)

Moved as they were, made extern; the probe runner links src/json.c
(PROBE_SRC), and tests/contract_derived.py builds the runner from PROBE_SRC.

Proof (omx-contract wave/contract-one-pass 1539b6a in the prefix):
make test-probe: plugin-hostd probe tests ok (the real-prober arms skip,
no plugin-qualify build); make test-contract: contract: ok; make
test-probe-schema test-vocabulary: vocabulary: ok.
…e.from (#126)

Proof: omx-contract validate --data with both tables beside its data:
131 items, valid; make test-format-coverage CONTRACT_SCHEMA_MAJOR=2: clap
331 fields (mapped 38) OK, lv2 458 (mapped 63) OK, self-test OK.
…iptor through the format table (#126)

plugin-hostd-probe describe runs omx-clap-scan --fields in a child under
run's limits (run_child), or reads a recorded dump (--fields-from), applies
the format's table and the transforms it names (src/describe.c), and writes
the scanned descriptor (docs/formats.md#the-descriptor-describe-writes).
make test-describe feeds recorded dumps (tests/fixtures/fields/*.tsv), so the
check needs no newer omx-clap-core.

Proof (omx-contract wave/contract-one-pass 1539b6a in the prefix): make
test-describe: describe: ok; both recorded descriptors equal, valid against
the installed schema and read valid by omx-contract validate (129 items, with
OMX_CONTRACT_CLI); 9 refusals each exit 2 naming the field, row or line; a
stand-in child gives the same descriptor, a failing one exit 3. Value-row
precedence sabotaged: both goldens and the child arm red. make test-probe,
test-contract, test-transforms green.
…#126)

Version 0.7.0 in the spec, debian/changelog, src/main.c and both manual
pages; no tag (the batch releases after the whole-set gate).

Proof: tools/protocol-gen splice/json/probe-schema: README.md,
doc/plugin-hostd.1, protocol/plugin-hostd.json and the probe schema
current; tests/no_pins.py and tests/ci_guards.py ok.
J2: plugin-hostd H1-H5 (#126) into the contract one-pass wave
…ed member is quarantined and the chain goes on (#101)
…nd a removed member keeps the order of the rest (#101)
…ms of the reply and of the adapter row bite again (#101)
…uster

J2b: the chain verb with crash quarantine (#101) into the contract one-pass wave
@linuxnow
linuxnow force-pushed the wave/contract-one-pass branch from 83e54db to 79d1a24 Compare October 21, 2026 16:29
…ct.d/3 tables, and the sabotage script builds the probe through the Makefile (#101, #126)

The first run of CI over the wave against the published omx-contract 3.0.0 found two things the gate's make test does not run: the RPM file-list check did not know the format tables plugin-hostd-devel now installs, and tests/sabotage.py compiled probe.c with a hand-written cc line that lacks describe.h's sources.
…obe rule builds from (src, include, packaging, Makefile) (#101)
@linuxnow
linuxnow marked this pull request as ready for review October 21, 2026 20:25
@linuxnow
linuxnow merged commit 6315e62 into main Oct 21, 2026
35 checks passed
@linuxnow
linuxnow deleted the wave/contract-one-pass branch October 21, 2026 20:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant