Scope
Extend the typed FIX message framework (kalshi/fix/messages/base.py) and the codec to support repeating groups, which the foundation deliberately deferred (scalar fields only). Prerequisite for Order Entry, Market Settlement, and RFQ message families.
Work
FixMessage base: declare and (de)serialize repeating groups in order, driven by the NoXxx count field + ordered member fields.
- Codec/
RawMessage: ordered group extraction from the flat tag list (groups are order-sensitive and can nest).
- Groups needed across phases:
NoPartyIDs (453), NoMiscFees (136), NoCollateralAmountChanges (1703), NoMultivariateSelectedLegs (20181), NoMarketSettlementPartyIDs (20108, nested).
Acceptance
- Golden round-trip fixtures for each group (encode → bytes → decode → model equality), including a nested group.
ruff + mypy --strict clean; tests in tests/fix/.
Dependencies
Builds on the foundation (#422). Part of #402.
Scope
Extend the typed FIX message framework (
kalshi/fix/messages/base.py) and the codec to support repeating groups, which the foundation deliberately deferred (scalar fields only). Prerequisite for Order Entry, Market Settlement, and RFQ message families.Work
FixMessagebase: declare and (de)serialize repeating groups in order, driven by theNoXxxcount field + ordered member fields.RawMessage: ordered group extraction from the flat tag list (groups are order-sensitive and can nest).NoPartyIDs(453),NoMiscFees(136),NoCollateralAmountChanges(1703),NoMultivariateSelectedLegs(20181),NoMarketSettlementPartyIDs(20108, nested).Acceptance
ruff+mypy --strictclean; tests intests/fix/.Dependencies
Builds on the foundation (#422). Part of #402.