sources: add the MIC column, conform Code on IDs 4 and 5, and fix the version table - #52
sources: add the MIC column, conform Code on IDs 4 and 5, and fix the version table#52ben-malbeclabs wants to merge 2 commits into
Conversation
Registry 1.3.1, editorial. 1.3.0 made Code name the venue rather than the matching engine, and left IDs 4 and 5 carrying SETAI_FINANCIALS and SETAI_COMMODITIES as a documented exception, on the grounds that a Code already in use downstream cannot be changed without coordination. That reasoning holds for the publishing venues and not for this one. Nothing carries these two values: the venue has no publisher, no metric series and no registered multicast group. A grep of this repository finds them only in the two table cells and the sentence explaining why they could not change. Both now read SETAI, and the exception paragraph is removed rather than reworded. The window for this closes at first deploy, since dz-publisher-metrics stamps venue and source_id on every series. Also corrects the VERSIONING.md row, which still read 1.2.0 after 1.3.0 moved sources/spec.md. That table is the fleet view and was the only place stating the wrong version.
a8b8e54 to
81abf34
Compare
…t engines Raised in review of the MIAX venue record: a distinct market identifier code is a good test for a tradfi venue that needs separate Source IDs. Recorded as a column rather than as prose, so it is a value a requester fills in rather than an argument they have to remember to make. Phrased as sufficient rather than necessary, because the converse fails badly. One MIC routinely covers several matching engines — that is the ordinary case wherever a venue runs spot and derivatives under one code, and it describes two of the venues already in this table. Stating it as a two-way test would have merged engines the rule above correctly separates. The column earns its place immediately: Kalshi is KLSH. An em dash means the venue has none, which is normal for a decentralised exchange and for any venue outside the standard's scope. Withheld means one exists but naming it would identify a venue trading under a codename, which is the state of IDs 4 and 5 — their MICs are public and would defeat the codename in a public registry. MINOR rather than PATCH: adding a column to the assignment table is additive under this document's own rule, the same classification 1.1.0 took for Code and Venue.
81abf34 to
7e90699
Compare
| **A Source ID names a matching engine, not a venue.** One venue may run several matching engines and therefore hold several Source IDs. Two engines are distinct where their order-matching rules differ, and equally where they match independently over disjoint instrument sets under identical rules; a capacity shard the venue can rebalance is a channel rather than an engine. [GLOSSARY.md](../GLOSSARY.md) carries the full test and is the authority for it. A new engine at an already-registered venue is a new ID rather than a reuse of that venue's existing one. Because IDs are never renumbered, this only ever adds, and an ID already assigned keeps meaning whichever engine has been publishing under it. Venues split their own engines on their own schedule, so treat the set as open rather than assuming the current table is final. | ||
|
|
||
| This document specifies version **1.3.0**: the reserved ranges, the current assignment set, and the process for requesting a new ID. | ||
| **A distinct market identifier code is strong evidence of a distinct engine.** Where a regulated venue operates under several ISO 10383 MICs, each names a market with its own rulebook and its own matching, so the MIC settles the test above without further argument. The converse does not hold: one MIC routinely covers several engines, which is the ordinary case wherever a venue runs spot and derivatives under one code. Treat a distinct MIC as sufficient, never as necessary. |
There was a problem hiding this comment.
The MIC criterion over-splits: ISO 10383 segment MICs routinely share one matching engine.
Line 9 says a distinct MIC "settles the test above without further argument". But ISO 10383 has operating MICs and segment MICs, and segment MICs commonly name market segments of a single matching platform rather than separate matching. Euronext Paris carries XPAR plus XMLI, ALXP, XMAT and others, all matched on one Optiq platform under one rulebook; London and Deutsche Börse are the same shape.
Under this paragraph as written, that venue is entitled to a separate Source ID per segment MIC — which is exactly the case GLOSSARY.md excludes ("a capacity shard the venue can rebalance is a channel rather than an engine"). The registry would grant four IDs where the authoritative test grants one, and IDs are never renumbered, so the split is unrecoverable.
Worth narrowing to operating MICs, or restating the criterion at the strength the bold lead sentence uses. The lead says "strong evidence" and the closing sentence says "sufficient" — those are different rules, and a requester will read whichever helps them.
| **A Source ID names a matching engine, not a venue.** One venue may run several matching engines and therefore hold several Source IDs. Two engines are distinct where their order-matching rules differ, and equally where they match independently over disjoint instrument sets under identical rules; a capacity shard the venue can rebalance is a channel rather than an engine. [GLOSSARY.md](../GLOSSARY.md) carries the full test and is the authority for it. A new engine at an already-registered venue is a new ID rather than a reuse of that venue's existing one. Because IDs are never renumbered, this only ever adds, and an ID already assigned keeps meaning whichever engine has been publishing under it. Venues split their own engines on their own schedule, so treat the set as open rather than assuming the current table is final. | ||
|
|
||
| This document specifies version **1.3.0**: the reserved ranges, the current assignment set, and the process for requesting a new ID. | ||
| **A distinct market identifier code is strong evidence of a distinct engine.** Where a regulated venue operates under several ISO 10383 MICs, each names a market with its own rulebook and its own matching, so the MIC settles the test above without further argument. The converse does not hold: one MIC routinely covers several engines, which is the ordinary case wherever a venue runs spot and derivatives under one code. Treat a distinct MIC as sufficient, never as necessary. |
There was a problem hiding this comment.
This widens the engine-distinctness test in the document that disclaims authority over it.
Line 7, unchanged just above: "GLOSSARY.md carries the full test and is the authority for it." GLOSSARY.md Matching engine (1.3.0) states a two-limb test — rules differ, or independent matching over disjoint sets — and is not touched by this PR.
So after this merges, a requester following the stated authority applies two limbs and a reviewer applying sources/spec.md 1.4.0 applies three, and the same request resolves differently depending on which document was consulted.
The repo's precedent runs the other way: the last widening landed in GLOSSARY.md 1.3.0 first, and this registry's own 1.2.0 entry records itself as "conformed the Source ID definition above to GLOSSARY.md 1.3.0". Same move here — add the MIC limb to the glossary entry, bump it, and let this document cite it.
| | `1` | Hyperliquid | `HYPERLIQUID` | Hyperliquid | — | Perpetual DEX | | | ||
| | `2` | Phoenix | `PHOENIX` | Phoenix | — | Perpetual DEX | | | ||
| | `3` | Kalshi | `KALSHI` | Kalshi | `KLSH` | Perpetual Futures, Prediction Market | Registered under the codename `Lashay` until the venue launched. Carries two matching engines and is due to split; see below. | | ||
| | `4` | Setai Financials | `SETAI` | Setai | *(withheld)* | Futures | Interface versioned separately from `5`. | |
There was a problem hiding this comment.
Both Setai cells read (withheld), so the only multi-row venue with MICs cannot demonstrate the new rule.
Line 39 says "Where two rows at one venue carry different MICs, that alone establishes them as distinct engines." IDs 4 and 5 are the one place in this table where that could be shown, and both cells are withheld — and the state is defined in the singular ("one exists"), which does not say whether these two rows share a MIC or hold different ones.
There is a second-order effect: if they do hold different MICs — which the withholding rationale implies, since naming them would identify the venue — then line 67's "the first assignment resting on the second half of the rule rather than the first" is superseded by the new sufficient condition and was not updated. Either the withheld state needs to encode same/different, or that sentence needs a clause acknowledging the MIC ground now also applies.
| | `3` | Kalshi | `KALSHI` | Kalshi | `KLSH` | Perpetual Futures, Prediction Market | Registered under the codename `Lashay` until the venue launched. Carries two matching engines and is due to split; see below. | | ||
| | `4` | Setai Financials | `SETAI` | Setai | *(withheld)* | Futures | Interface versioned separately from `5`. | | ||
| | `5` | Setai Commodities | `SETAI` | Setai | *(withheld)* | Futures, Options on Futures | Interface versioned separately from `4`. | | ||
| | `6` | Binance USD-Margined Futures | `BINANCE` | Binance | — | Perpetual Futures, Dated Futures | The venue's own `futuresType` for this engine is `U_MARGINED`. Spot, coin-margined futures and options are separate matching engines at this venue, unclaimed, and will share this `Code`. | |
There was a problem hiding this comment.
The em dash on ID 6 contradicts this document's own account of the venue.
Line 39 defines the em dash as "the venue has none, which is the normal case for a decentralised exchange and for any venue outside the standard's scope". Line 61 says of this same row: "The operator of record is Nest Exchange Limited, licensed in the Abu Dhabi Global Market as a Recognised Investment Exchange for derivatives since 5 January 2026."
A licensed RIE is squarely inside ISO 10383's scope, so the em dash asserts something the ID 6 section denies. The column has three states and none of them means "not researched", so an unfilled cell is indistinguishable from an authoritative "none exists" — and a registry mirror built from this table will carry the assertion.
|
|
||
| IDs `4` and `5` predate this rule and still carry engine-level Codes, `SETAI_FINANCIALS` and `SETAI_COMMODITIES`. They are left alone here: a `Code` already in use downstream cannot be changed without coordinating with whoever carries it. | ||
|
|
||
| Downstream systems already carry these values, so this column documents what exists rather than introducing anything new. This registry is the authority for it; any table of these values held elsewhere is a [registry mirror](../GLOSSARY.md) and is derived, never authoritative. |
There was a problem hiding this comment.
This PR deletes the only statement constraining a change to an existing Code, rather than narrowing it.
The removed sentence read: "a Code already in use downstream cannot be changed without coordinating with whoever carries it." Only its application to IDs 4 and 5 is obsolete; the rule itself is not. After this hunk, nothing in the registry requires coordination before changing any Code, and line 82 still classifies a Code edit on an existing row as a PATCH.
Concretely: a later PR renames KALSHI or BINANCE — values this document itself says downstream carries as metric label values — as a patch release. GLOSSARY.md line 32 records that this failure is silent: "a code that stops matching its live group fails silently rather than loudly." The compatibility promise at line 84 only covers what an ID means; it says nothing about the Code column.
Suggest keeping the general rule and dropping just the IDs 4/5 clause.
|
|
||
| Downstream systems already carry these values, so this column documents what exists rather than introducing anything new. This registry is the authority for it; any table of these values held elsewhere is a [registry mirror](../GLOSSARY.md) and is derived, never authoritative. | ||
|
|
||
| `MIC` is the engine's ISO 10383 market identifier code. An em dash means the venue has none, which is the normal case for a decentralised exchange and for any venue outside the standard's scope; *(withheld)* means one exists but naming it would identify a venue trading under a codename. Where two rows at one venue carry different MICs, that alone establishes them as distinct engines. |
There was a problem hiding this comment.
MIC is defined here as the engine's code, which line 9 denies and row 3 disproves.
Line 9, added in this same PR: "one MIC routinely covers several engines". Line 74 repeats the framing — "records the engine's MIC where it has one". Engines do not hold MICs; markets and market operators do.
Row 3 is the counterexample already in the table: it carries one MIC KLSH while its own section says it "carries two matching engines and is due to split". When that split lands, a requester following step 2 must record "the engine's MIC" for each new row, finds only one venue-level code exists, and has no rule saying whether duplicating KLSH across both rows is correct.
"the market identifier code under which the engine trades" (or "the venue's MIC for this market") would match how the rest of the paragraph actually behaves.
Registry
1.4.0. A new column, and two corrections — one of which reverses a decision in #46.Summary of Changes
A
MICcolumn, recording each engine's ISO 10383 market identifier code. Raised by @armcconnell in review ofmalbeclabs/miax#2: a distinct MIC is a good test for a tradfi venue needing separate Source IDs. Recorded as a column rather than prose, so it is a value a requester fills in rather than an argument they have to remember to make.Stated as sufficient, never necessary. The converse fails badly — one MIC routinely covers several matching engines, which is the ordinary case wherever a venue runs spot and derivatives under one code, and describes two of the venues already in this table.
Three states, each meaning something distinct. An em dash: the venue has none, normal for a decentralised exchange or anything outside the standard's scope. A code:
3isKLSH. (withheld): one exists, but naming it would identify a venue trading under a codename, which is the state of IDs4and5— their MICs are public and would defeat the codename here.Codeon IDs4and5now readsSETAI. #46 madeCodename the venue and left those two rows carryingSETAI_FINANCIALSandSETAI_COMMODITIESas an exception, on the grounds that aCodealready in use downstream cannot be changed without coordinating with whoever carries it.That reasoning holds for the publishing venues and not for this one. Nothing carries these two values: the venue has no publisher, no metric series and no registered multicast group. A grep finds them only in the two table cells and the sentence explaining why they could not change — which this PR also removes, rather than rewording. The window closes at first deploy, since
dz-publisher-metricsstampsvenueandsource_idon every series.The
VERSIONING.mdrow is corrected. It still read1.2.0after #46 movedsources/spec.mdto1.3.0. That table is the fleet view and was the only place stating a wrong version.MINOR rather than PATCH because adding a column to the assignment table is additive under this document's own rule — the same classification
1.1.0took forCodeandVenue.Testing Verification
go test ./... -count=1intools/conformance— 7 of 7 packages.SETAI_no longer appears anywhere insources/spec.md.1.4.0consistent across the version line, the changelog entry and theVERSIONING.mdrow.MICcell; the three states are defined in the column description.KLSHverified against the ISO 10383 listing for KalshiEX LLC.1,2,3and6otherwise untouched. No ID renumbered, reordered or removed, and no assignment changed.