Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/spicy-jars-clap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"catalog": patch
---

IO vocabulary follow-ups from the #539 review: correct Bastl Klik clock output to `type: clock`, correct Mackie DLM12 channel inputs to `mic`/`instrument`, add `usb-b-mini` to the connection vocabulary (Bastl Klik, Artiphon INSTRUMENT 1), canonicalize Xone:43 connections (`trs` → `1/4-inch`, `minijack` → `1/8-inch`), and update CLAUDE.md/CONTEXT.md/VALIDATION_ERRORS.md to reflect enforced IO types (E117) and the expand-the-vocabulary policy.
20 changes: 13 additions & 7 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ Note: Slugs are derived from filenames, not stored in the YAML files.
**`manufacturer`** must be a slug reference (the manufacturer's filename without `.yaml`), not the display name:

```yaml
manufacturer: hologram-electronics # correct (slug)
manufacturer: Hologram Electronics # wrong (display name)
manufacturer: hologram-electronics # correct (slug)
manufacturer: Hologram Electronics # wrong (display name)
```

**`description`** uses flow scalar format (Prettier auto-wraps long lines):
Expand Down Expand Up @@ -95,16 +95,22 @@ io:

**IO field validation** uses a two-tier system:

- **Strict (errors, blocks CI):** `signalFlow`, `category`, `position`, `price.currency`
- **Strict (errors, blocks CI):** `signalFlow`, `category`, `type`, `position`, `price.currency`
- `signalFlow`: input, output, bidirectional
- `category`: audio, midi, digital, power
- `type`: closed vocabulary in `schema/io-types.yaml` — unknown values fail with E117
- `position`: Top, Bottom, Left, Right
- `currency`: ISO 4217 codes (USD, EUR, GBP, etc.) — see `schema/currencies.yaml`
- **Advisory (warnings, non-blocking):** `type`, `connection`, `link.type`
- Known values listed in `schema/io-types.yaml`, `schema/io-connections.yaml`, `schema/link-types.yaml`
- **Advisory (warnings, non-blocking):** `connection`, `link.type`
- Known values listed in `schema/io-connections.yaml`, `schema/link-types.yaml`
- Unknown values produce warnings in `pnpm validate` output
- Add new values to schema files via PR when they're confirmed valid

**The vocabularies are meant to grow.** Enforcement catches mistakes (connectors
in `type`, vague values); it must not force-fit genuinely new signals or
connectors onto near-miss values. When an import surfaces a legitimate new value
(verify via manual/photos), add it to the schema vocabulary in the same PR.

**Semantic distinction:** `type` describes the signal characteristic (line, instrument, headphone, midi, usb, expression). `connection` describes the physical connector (1/4-inch, xlr, usb-c, 5-pin din). Don't swap them.

**Passive speakers use `speaker-level`, not `line`.** Passive-loudspeaker inputs
Expand Down Expand Up @@ -171,7 +177,7 @@ Use `supersedes` to link product generations, form factor variants, and major ve
# pro-c-3.yaml
name: Pro-C 3
manufacturer: fabfilter
supersedes: 7QMeWge0fOrmQz_oVLCKk # ID of Pro-C 2
supersedes: 7QMeWge0fOrmQz_oVLCKk # ID of Pro-C 2
identifiers:
au: com.fabfilter.Pro-C.AU.3
```
Expand All @@ -182,7 +188,7 @@ To find the ID of a product you want to reference, open its YAML file and look f

```yaml
# Example from pro-c-2.yaml
id: 7QMeWge0fOrmQz_oVLCKk # ← Use this value for supersedes
id: 7QMeWge0fOrmQz_oVLCKk # ← Use this value for supersedes
name: Pro-C 2
manufacturer: fabfilter
```
Expand Down
12 changes: 6 additions & 6 deletions data/hardware/allen-and-heath-xone43.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -109,42 +109,42 @@ io:
signalFlow: output
category: audio
type: line
connection: trs
connection: 1/4-inch
maxConnections: 1
position: Left
- name: X:FX Send R
signalFlow: output
category: audio
type: line
connection: trs
connection: 1/4-inch
maxConnections: 1
position: Left
- name: X:FX Return L
signalFlow: input
category: audio
type: line
connection: trs
connection: 1/4-inch
maxConnections: 1
position: Left
- name: X:FX Return R
signalFlow: input
category: audio
type: line
connection: trs
connection: 1/4-inch
maxConnections: 1
position: Left
- name: Headphones Output (1/4")
signalFlow: output
category: audio
type: headphone
connection: trs
connection: 1/4-inch
maxConnections: 1
position: Right
- name: Headphones Output (3.5mm)
signalFlow: output
category: audio
type: headphone
connection: minijack
connection: 1/8-inch
maxConnections: 1
position: Right
links:
Expand Down
2 changes: 1 addition & 1 deletion data/hardware/artiphon-instrument-1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,6 @@ io:
signalFlow: bidirectional
category: digital
type: usb
connection: mini-usb
connection: usb-b-mini
maxConnections: 1
position: Bottom
2 changes: 1 addition & 1 deletion data/hardware/bastl-instruments-klik.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ io:
- name: Clock Output
signalFlow: output
category: audio
type: "cv/gate"
type: clock
connection: 1/8-inch
maxConnections: 1
position: Top
Expand Down
4 changes: 2 additions & 2 deletions data/hardware/mackie-dlm12.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ io:
- name: Channel 1 Input
signalFlow: input
category: audio
type: line
type: mic
connection: combo jack
maxConnections: 1
position: Bottom
- name: Channel 2 Input
signalFlow: input
category: audio
type: line
type: instrument
connection: combo jack
maxConnections: 1
position: Bottom
Expand Down
3 changes: 2 additions & 1 deletion docs/VALIDATION_ERRORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ receiver's BNC ports are `type: rf` (an antenna) with `connection: bnc` — not

**Common mistakes:**

- `bnc`, `xlr`, `trs` -> connectors, not signals. Put them in `connection` and give `type` the actual signal (`rf`, `line`, `mic`)
- `bnc`, `xlr` -> connectors, not signals. Put them in `connection` and give `type` the actual signal (`rf`, `line`, `mic`)
- `trs` -> also a connector, and not a valid `connection` value either — use `connection: 1/4-inch` (or `1/8-inch`) and name the signal in `type`
- `spdif` -> use `s/pdif`
- `aes3`, `aes-ebu` -> use `aes/ebu`
- `wordclock`, `word-clock` -> use `word clock`
Expand Down
1 change: 1 addition & 0 deletions schema/CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,7 @@ rear-panel diagram — assign them with `pnpm enrich-io <slug>`, not during bulk
- `usb-a`
- `usb-b`
- `usb-b-micro`
- `usb-b-mini`
- `usb-c`
- `thunderbolt 1`
- `thunderbolt 2`
Expand Down
1 change: 1 addition & 0 deletions schema/io-connections.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ connections:
- usb-a
- usb-b
- usb-b-micro
- usb-b-mini
- usb-c

# Other digital connectors
Expand Down
2 changes: 1 addition & 1 deletion schema/io-types.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ types:
# Control types
- expression
- cv/gate
- clock # modular sync/clock pulse (1/8-inch), distinct from `word clock`
- clock # modular sync/clock pulse, distinct from `word clock`
- gpio

# Wireless types
Expand Down