Skip to content

Embed FIX Orchestra repositories instead of the QuickFIX XML (#201) - #206

Merged
joaquinbejar merged 4 commits into
mainfrom
stack/2-201-embed-orchestra
Oct 22, 2026
Merged

joaquinbejar merged 4 commits into
mainfrom
stack/2-201-embed-orchestra

Conversation

@joaquinbejar

Copy link
Copy Markdown
Owner

Summary

ironfix-dictionary declared MIT but shipped four QuickFIX XML files under The QuickFIX Software License 1.0. This PR makes the embedded dictionaries load from the FIX Trading Community Orchestra repositories (Apache-2.0) instead, so the published crate carries no QuickFIX content.

Changes

  • Embedded files. spec/orchestra/ holds four files, verbatim from orchestrations@cd24169a, with the upstream LICENSE and a provenance README. Upstream publishes no NOTICE file.

    Dictionary Source
    FIX 4.2 OrchestraFIX42.xml
    FIX 4.4 OrchestraFIX44.xml
    FIXT 1.1 FIXTSession.xml
    FIX 5.0 SP2 derived from OrchestraFIXLatest.xml with from_orchestra_latest_xml (Load FIX 4.2, FIXT 1.1 and FIX 5.0 SP2 from FIX Orchestra (dictionary) #200)
  • Public API. Dictionary::fix42(), fix44(), fixt11() and fix50sp2() keep their names, signatures and caching.

  • QuickFIX files. They moved to tests/fixtures/quickfix/ together with LICENSE-QUICKFIX, and are excluded from the package. They remain for:

    • the QuickFIX-loader tests;
    • the equivalence diff;
    • the codegen tests for shared components. Orchestra 4.4 models Parties and similar blocks as groups, so those tests need the QuickFIX file.
  • Tests and goldens. Tests that pinned QuickFIX content now follow Orchestra, as the owner decided. The FIX 4.2 and FIXT 1.1 goldens are regenerated.

  • Docs.

    • ADR-0032 supersedes ADR-0010. The transport plus application composition from ADR-0010 still stands.
    • CHANGELOG.md is new and lists every user-observable difference.
    • README, doc/orchestra_differences.md and doc/fix_operations.md are updated.

Measurements

Apple M4 Max with 64 GB, release build, first call in a fresh process, 3 runs.

Dictionary First load before First load after
fix42 about 1.1 ms 4.2 to 6.8 ms
fix44 about 2.6 ms 6.4 to 9.2 ms
fixt11 about 0.14 ms about 0.5 ms
fix50sp2 about 10 ms 29 to 33 ms
  • A cached call takes about 42 ns, unchanged.
  • The .crate grows from 356 441 bytes to 1 133 644 bytes. No compression and no new dependency were needed.

Public / contract impact

No pub item changes, but dictionary content and behaviour do, so this is a breaking change:

  • field names change;
  • more fields are enumerated, so validation can return new InvalidEnumValue errors;
  • some deprecated SP2 fields are dropped;
  • generated code changes shape: per-message group entry types replace the shared Parties-style component types.

The version bump and the per-crate licence metadata (MIT AND Apache-2.0) are in #202.

Testing

  • cargo test --workspace: 2551 passed, 0 failed.
  • clippy -D warnings, fmt, doc, check-spanish and the release build are clean.
  • cargo package -p ironfix-dictionary --list contains only spec/orchestra/*.
  • grep -ri quickfix ironfix-dictionary/spec finds nothing.

Stack: #200 (merged) → #201 (this) → #202.

Closes #201

…ickFIX (#201)

Dictionary::fix42/fix44/fixt11 are built from OrchestraFIX42.xml,
OrchestraFIX44.xml and FIXTSession.xml, and fix50sp2 from
OrchestraFIXLatest.xml through from_orchestra_latest_xml, all vendored
verbatim under spec/orchestra with the upstream Apache-2.0 LICENSE (upstream
has no NOTICE). Names, signatures and caching are unchanged.

The QuickFIX files move to tests/fixtures/quickfix (excluded from the
package, with LICENSE-QUICKFIX) for the QuickFIX loader tests, the
equivalence diff and the codegen component tests. Tests that pinned QuickFIX
content follow Orchestra; the FIXT 1.1 and FIX 4.2 codegen goldens are
regenerated.

Refs #201
…changes (#201)

README, doc/orchestra_differences.md and doc/fix_operations.md describe the
Orchestra sources; CHANGELOG.md starts with an Unreleased section listing
every user-observable difference and its semver impact.

Refs #201
@joaquinbejar joaquinbejar added enhancement New feature or request dictionary ironfix-dictionary / codegen / derive labels Oct 22, 2026
@joaquinbejar joaquinbejar self-assigned this Oct 22, 2026
@joaquinbejar
joaquinbejar merged commit 162d1f4 into main Oct 22, 2026
35 checks passed
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
ironfix-codegen/src/generator.rs 91.12% <ø> (ø)
ironfix-codegen/src/views.rs 97.57% <ø> (+0.20%) ⬆️
ironfix-core/src/message.rs 84.37% <ø> (ø)
ironfix-dictionary/src/composition.rs 69.56% <ø> (ø)
ironfix-dictionary/src/loader.rs 91.46% <100.00%> (+0.02%) ⬆️
ironfix-dictionary/src/orchestra.rs 94.44% <ø> (ø)
ironfix-dictionary/src/schema.rs 97.16% <ø> (ø)
ironfix-dictionary/src/validator.rs 96.73% <ø> (ø)
ironfix-engine/src/wire.rs 93.08% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@joaquinbejar
joaquinbejar deleted the stack/2-201-embed-orchestra branch October 22, 2026 08:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dictionary ironfix-dictionary / codegen / derive enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Embed FIX Orchestra repositories instead of the QuickFIX XML (dictionary)

2 participants