# Changelog

## 0.1.0

Initial release.

### Session protocol

- `FixAlchemy.Engine` runs the session protocol for one connection, independent
  of which side dialed: framing, sequence numbers, heartbeats and TestRequests,
  ResendRequests and replay, and delivery to subscribers.
- `FixAlchemy.Client` initiates: dials, sends the Logon, reconnects with backoff.
- `FixAlchemy.Server` accepts: listens over TCP or TLS, matches each Logon to a
  configured session, and refuses one that matches nothing, fails credentials,
  or names a session already connected.

### Dictionaries

- Generates field, message, and repeating-group parsers from a venue's FIX XML,
  including the `FIXT1.1.xml` and `FIX50SP2.xml` pair a FIX 5.0 session needs.
- `FixAlchemy.Engine.Validation` checks inbound messages against the dictionary
  and answers a bad one with a Reject naming the SessionRejectReason.

### Routing and market data

- `FixAlchemy.Dispatch` routes inbound messages to subscribers by MsgType, by a
  tag equalling a value, or by a predicate over a tag.
- `FixAlchemy.Feed` publishes one price to many sessions through a tree of venue
  transforms, applying each transform once however many sessions sit below it.

### Storage

- `FixAlchemy.MessageStore` retains sent messages for replay; in-memory by
  default.
- `FixAlchemy.SessionStore` carries sequence numbers across connections and
  restarts, keyed by BeginString, SenderCompID and TargetCompID; ETS-backed
  implementation included.
