This release is a pre-release and may not be stable for production use.
FIXTracer
FIXTracer is a deterministic trade investigation engine for messy FIX logs. It reconstructs order lifecycles, detects anomalies, and produces local-first HTML and JSON artifacts. Current status: Public Technical Preview for FIX-literate engineers. The initial public package offers the Free product only.
Python target: 3.11 and 3.12. Installed-wheel checks cover both in CI.
Technical Preview Status
Current implementation reality:
fixtracer extractstreams one line-oriented FIX log into a direct identifier extract.fixtracer reportgenerates a self-contained HTML artifact and optional JSON artifact from one or more FIX logs.- the current default machine-facing JSON is a compact, versioned packed artifact; legacy expanded
{"meta": {...}, "timelines": [...]}artifacts still render - the current HTML experience is timeline-first
- release posture is Technical Preview, not broad commercial launch
Target product contract:
- FIXTracer converges on a case-first architecture: raw FIX logs become a portable investigation case
- that case should support a lazy viewer, timeline inspection, standalone evidence reports, investigation summary, incident cases, detailed timelines, and provenance
- HTML and JSON should become semantically aligned views or exports from the same case model, with standalone HTML preserved for sharing
Contract status: the current timeline-first ReportArtifact semantic payload is modeled and schema-exported as report_artifact.json; #227 formalizes the stable target Finding contract, #228 formalizes the stable target Ambiguity contract and first-pass packed reconstruction metadata, #239 formalizes the target InvestigationArtifact contract, #240 adds the minimal IncidentCase contract, #241 adds stable timeline_id / subject fields to OrderTimeline plus timeline-ID case references, and #242 defines nullable case_type / owner_domain enum contracts. Full runtime migration to that target envelope is deferred; --json-out now emits a compact packed report artifact for the current timeline-first payload, and render accepts both compact and legacy expanded report JSON.
The timeline reconstruction engine remains the factual backbone and trust surface of the product.
Current implementation status is tracked in docs/status.md.
Current validation snapshot and exact test counts are tracked in docs/status.md.
Technical Preview planning: see docs/release_roadmap.md and docs/release_posture.md. Do not treat the current timeline-first artifact as the final incident-case product shape. Known limitations are tracked in docs/known_limitations.md, docs/status.md, and CHANGELOG.md. Pre-1.0 versioning policy is documented in CHANGELOG.md.
Data safety (Technical Preview)
FIXTracer is local-first. After installation, the documented local commands in
this README (sample, extract, report, render, and version) run against local
files and do not transmit FIX logs or telemetry.
FIX logs can contain sensitive client, order, symbol, routing, account, venue, and execution details. Run FIXTracer on production logs only on approved internal machines, redact data where appropriate, and do not upload production logs to hosted demos, public issues, or third-party analysis surfaces. Sample logs and sample reports use test data. Do not send or attach production logs to support or feedback during this preview. Use descriptions or synthetic reproductions.
During Technical Preview, any public website or demo surface must not accept production FIX log uploads or provide a hosted parser for real/internal logs. Use the local CLI on approved internal machines when evaluating real/internal logs. Public demos and sample reports must use bundled synthetic examples unless a future browser-local demo is explicitly reviewed and approved.
See docs/data_safety.md and docs/known_limitations.md before using the Technical Preview on internal data.
Install (Technical Preview)
Before installing or using FIXTracer, read the Free terms
and the bundled LICENSE.txt. The owner-approved terms allow ongoing individual manual
diagnostic use, including at work, and authorized internal coworker report sharing.
Automated operational processing, team deployment, and external client deliverables
are excluded. Existing Free output limits still apply. Third-party notices are in
THIRD_PARTY_NOTICES.txt. FIXTracer remains proprietary and free of charge.
The release bundle carries the owner-approved agreement and resolved runtime
dependency notices. Publication verifies the exact accepted wheel and frozen
legal files as described in the legal delivery guide.
Both files are available offline under the installed fixtracer/legal_assets/
directory. Binary archives also place them beside the executable. Reading the
files does not activate Pro or create an acceptance record. The existing
license.json file serves only the separate Pro activation path.
Version 0.1.0a3 includes a useful default Free sample. The recommended
isolated install path for this prerelease is:
pipx install fixtracer==0.1.0a3
fixtracer --version
Equivalent tool installs are:
uv tool install fixtracer==0.1.0a3
pip install fixtracer==0.1.0a3
Installed smoke test using bundled synthetic data:
fixtracer sample --out fixtracer_sample.log
fixtracer report fixtracer_sample.log --out report.html --json-out report.json
fixtracer render report.json --out rerendered.html
The default fill_before_activation sample produces one broad lifecycle finding
and four preview events in Free. Use --name simple_happy_path with sample
for a clean-order summary instead.
When using 0.1.0a2, select --name fill_before_activation to generate the
same sample explicitly.
Planned versioned releases will include SHA256 checksums for downloadable artifacts. See docs/release_verification.md before installing from a direct download. Checksums are provided for integrity verification; stronger artifact signing is future work.
Quickstart (dev)
# use Python 3.11
python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
# optional but helpful
pre-commit install
make lint
make test
fixtracer --help
fixtracer version
Synthetic Example
The installed sample command writes a bundled synthetic FIX log or generates a
report directly from one. Use synthetic data for public demos, screenshots, and
sample reports; do not upload production logs to hosted demos or public feedback
channels. The bundled sample data is described in
fixtracer/samples/README.md.
Named Technical Preview scenario inputs are documented in
fixtracer/samples/preview/README.md.
fixtracer sample --report-out report.html
open report.html
Choose different filenames for each selected sample log, HTML, and JSON output.
sample checks all selected destinations before writing. It refuses aliases,
file/directory conflicts, and effective paths that differ only by case or
canonical Unicode normalization, including parent components. Unverifiable
paths also fail with exit code 2. Safety diagnostics remain visible with
global --quiet. A preflight refusal preserves existing outputs and leaves
missing outputs and directories absent.
With --report-out, the default log is unused unless --out or -o selects
it explicitly. Thus, report-only output named fixtracer_sample.log is valid.
Existing, non-conflicting outputs can still be replaced, and new parent
directories can still be created. The check does not protect against concurrent
filesystem changes or roll back unrelated failures after writing starts.
Generate a named scenario report with:
fixtracer sample \
--name invalid_origclordid_reference \
--report-out report.html \
--json-out report.json
The generated HTML file is fully self-contained and can be viewed offline. Treat generated HTML/JSON artifacts as potentially sensitive because they may contain FIX fields, order identifiers, account-like values, venue/proprietary tags, and trading activity. Share them only through approved channels after reviewing or redacting their contents. Today it renders the current timeline-first artifact. The target direction is a stronger investigation-artifact shell over the same truth layer. Standalone HTML remains an important derived evidence report/export from the future case model.
Direct Incident Extraction
The approved v0.1.0a2 large-log workflow is:
large line-oriented FIX log
-> direct identifier extract
-> FIXTracer report
-> report.html
The report is self-contained. Version 0.1.0a3 preserves the extraction contract
introduced in 0.1.0a2.
Use one or more exact identifiers. Multiple selectors use OR behavior.
fixtracer extract production.log --clordid ABC123 --out incident.log
fixtracer extract production.log --orderid VENUE123 --out incident.log
fixtracer extract production.log --execid EXEC123 --out incident.log
fixtracer report incident.log --out incident.html
--clordid matches 11 (ClOrdID) and 41 (OrigClOrdID). --orderid matches
37 (OrderID). --execid matches 17 (ExecID). Each selector is repeatable.
The input contract is intentionally narrow:
- Each physical line contains zero or one complete FIX message.
- A supported message starts with a supported
8 (BeginString)value after an optional host-log prefix. - The optional prefix can contain numeric host metadata. It ends immediately before the first supported BeginString candidate.
- One physical line contains the complete message and no second FIX message.
- The delimiter immediately after BeginString selects SOH, literal
^A, pipe, or one ASCII whitespace byte. - Only the selected delimiter separates fields. Other delimiter-like text can occur in field values.
- The message contains
8,9 (BodyLength), and35 (MsgType). - The final field is
10 (CheckSum), and the selected delimiter follows its value. - Only the physical line ending can follow the final delimiter.
- The physical-line content is at most 1 MiB, excluding its line ending.
- FIXTracer does not verify numerical BodyLength or CheckSum values during extraction.
A line without a supported BeginString candidate is noise. The command ignores
noise. It counts malformed candidates and oversized lines in
malformed_skipped.
The command removes the host prefix. It preserves tag order, delimiter form, duplicate messages, and source order. It writes one selected message per output line.
The command writes output atomically. No match exits 1. Invalid or unsafe
output exits 2. Existing output remains unchanged after each failure.
The fixed match limit is 10,000 messages.
The result reports lines_scanned, matched_messages, written_messages, and
malformed_skipped.
The command excludes these features:
- wrapped or multiline FIX messages
- multiple FIX messages on one physical line
- mixed delimiters within one message
- host-log suffixes after CheckSum
- relationship expansion, including
--follow-chain fixtracer scan- time-window selection
- MsgSeqNum and explicit session selectors
- context-message expansion
- directory and cross-file extraction
- SQLite
.fxtcase, viewer, and inspect integration - Pro licensing behavior
SQLite .fxtcase is in development under separate work. This release makes no
delivery-date promise for that path.
Report Input Envelope
The v0.1.0a2 report path is designed for targeted incident extracts.
FIXTracer copies each deduplicated resolved input file into a private snapshot.
The size limit, source hash, and parser use the same snapshot bytes:
- The recommended maximum is 5,000,000 bytes.
- Input above 5,000,000 bytes produces a memory-risk warning.
- The hard limit is 10,000,000 bytes.
- Input above 10,000,000 bytes exits with code
2before input hashing or report processing. --force-large-inputbypasses the refusal and shows a strong memory-risk warning.
The exact 10,000,000-byte boundary is accepted with a warning. A refusal does
not create, truncate, or replace HTML or JSON output. Required safety messages
remain visible with --quiet and --no-progress.
The private snapshot needs available temporary space equal to the consumed
input bytes. Set TMPDIR to select a disk-backed temporary directory. If the
selected directory is a tmpfs, the snapshot consumes memory in addition to
report processing.
Reduce large input before report generation:
fixtracer extract production.log --clordid ABC123 --out incident.log
fixtracer report incident.log --out incident.html
See the report input benchmark evidence for the measured release envelope.
Outputs
Direct incident extract:
fixtracer extract production.log --clordid ABC123 --out incident.log
HTML report:
fixtracer report path/to/fix.log --out report.html
Structured JSON artifact:
fixtracer report path/to/fix.log --json-out report.json
HTML and JSON in one run:
fixtracer report path/to/fix.log --out report.html --json-out report.json
Render HTML from an existing JSON artifact:
fixtracer render report.json --out report.html
Use --json-out when you want the current structured report artifact for transparency, debugging, triage preview, manually invoked scripting for an individually selected investigation, or a later render step.
Technical Preview JSON can change between preview releases.
Current implementation: the machine-facing artifact is a compact deterministic JSON envelope containing a manifest and deterministic gzip/base64 packed payload.
fixtracer render consumes that artifact to rebuild the HTML report. It also remains compatible with older expanded {"meta": {...}, "timelines": [...]} report JSON files.
Target direction: #227/#239/#240/#241/#242 define the stable Finding, explicit InvestigationArtifact, minimal IncidentCase, stable timeline cross-link, and nullable case taxonomy contracts, but this JSON output has not migrated to that envelope yet. Future case-first output should treat standalone HTML as a derived evidence report/export from the portable case model.
Report and render output safety
report and render check all selected input and output paths before processing
or writing. Conflicting paths cause exit code 2. The diagnostic remains
visible with --quiet and --no-progress. Existing bytes remain unchanged,
and missing output files and directories remain absent. Choose different
filenames to retry; FIXTracer does not rename an output automatically.
The check rejects aliases through relative paths, .., symbolic links, and
hard links. It also rejects complete effective paths that differ only by letter
case or canonical Unicode normalization, including parent directory names.
This conservative restriction applies on every platform, even when the
filesystem could store those names separately. Identical leaf names in clearly
different parent directories remain permitted. Safe existing outputs can still
be replaced, and safe missing parent directories can still be created.
A file destination cannot also be a required output directory. Symbolic-link
targets must have traversable directory components, including components before
... Each required directory must exist or be created by the selected writer.
This is a preflight check. It does not protect against concurrent filesystem
changes, make combined output publication atomic, or provide crash recovery.
The sample command also rejects conflicting selected output destinations. Use distinct
paths for its log, HTML, and JSON outputs.
License policy (Technical Preview)
The 0.1.0a3 release retains the Free Technical Preview at no charge. The public
release does not offer Pro access, license issuance, pricing, payment, accounts,
or commercial activation.
--version, version, sample, and extract are Free. Explicit-file report runs emit
a limited Free triage artifact. render remains license-free and follows the
artifact profile embedded in the JSON. Directory and recursive inputs are not
available in the initial public Free release. Existing Pro-capable code remains
dormant and is not a released product surface. See
docs/free_pro_policy.md for the longer-term policy.
Run what exists today
fixtracer extractperforms Free direct identifier extraction from one line-oriented FIX log. It does not expand relationships or process multiple files.fixtracer reportparses FIX logs, builds deterministic timelines, detects implemented anomalies, and renders a self-contained HTML artifact. Public explicit-file reports are Free triage-depth and redact raw FIX and exact rule-code surfaces.reportaccepts explicit file inputs. Directory discovery and--recursiveare not available in the initial public Free release.fixtracer renderrebuilds HTML from the current report JSON artifact without a license check, preserving the embedded output profile.- Available CLI commands:
extract,report,render,sample,version. samplewrites a bundled synthetic FIX log for installed smoke tests and quick demos.
FIXTracer is CLI-first and produces a single, self-contained artifact per run. A legacy web demo was removed and is no longer supported.
There is no hosted production-log parser in the Technical Preview; run
fixtracer report locally for real or internal logs.
Feedback
After the public website is available, use the feedback page for bugs, confusing output, documentation gaps, or preview feedback. Do not send or attach production logs to support, feedback, or public issues. Use descriptions or synthetic reproductions.
Product direction
FIXTracer is evolving from timeline/report output toward deterministic, portable investigation cases while preserving whole-log ingestion, evidence-backed timelines, and HTML/JSON/export alignment from one case model.
The direct extraction command is the bounded v0.1.0a2 bridge for supported
line-oriented large logs. Whole-log case processing remains the target contract.
Human-facing strategy source of truth: docs/product_direction.md
CLI report progress
fixtracer report uses standard verbosity flags:
- Default: deterministic phase lines (
[N/T] <Phase name>). --verbose/-v: rich progress (spinners, elapsed time, rates).--no-progress: no progress output (warnings/errors still shown).--quiet/-q: suppress non-safety output. Required input-size warnings and refusals remain visible.
Browser support for HTML reports
- All interactivity is embedded directly in the generated HTML file.
- Interactive view requires a modern desktop browser with JavaScript and
DecompressionStream("gzip")(Chrome, Edge, Firefox, Safari). - The engaged timeline lane state also relies on CSS
:has()support (Chrome 105+, Firefox 121+, Safari 15.4+); older browsers still render the lane, but keep the spine in its neutral tone. - Mobile/Quick Look viewers fall back to an intentionally minimal static preview. The full artifact is a desktop interactive experience.
Project map
fixtracer/
cli/ # Typer CLI (extract, report, render, sample, version)
licensing/ # License verification + deterministic exit policy
models/ # Canonical Pydantic models + schema export
parser/ # Deterministic FIX parser + normalization
rules/ # Deterministic anomaly engine (partial rule set)
order/ # Deterministic routing + timeline building
render/ # HTML investigation artifact renderer (current implementation is timeline-first)
docs/ # Human docs (critical path, BMVP overview, epics)
schemas/ # Generated JSON Schemas
Status today
| Component | Status | Notes |
|---|---|---|
| CLI | Implemented (extract, report, render, sample, version) |
extract streams direct matches from one line-oriented log; report runs parse -> route -> timeline -> current artifact; render turns current JSON into HTML |
| Parser | Implemented | Delimiter/prefix/multiline handling with deterministic normalization |
| Routing | Implemented | Deterministic order / session / ungrouped / other partitioning |
| Timeline | Implemented | Union-find grouping + deterministic ordering + event mapping |
| Anomaly engine | Partial | 20 emitted rule codes are implemented today; see docs/status.md for the current rule set and remaining Step 3 gaps |
| Renderer | Implemented | Self-contained HTML with packed artifact data, a minimal graceful fallback, interactive anomaly/session surfaces, and current JSON round-tripping |
| Goldens/tests | Implemented (with a small number of legacy markers) | Seed/extended/regression/anomaly/combined suites are present; see docs/status.md for the current validation baseline |
| Licensing | Implemented verification path | Signature verification, deterministic policy checks, Free triage explicit-file reports, Pro directory/recursive gates, and full-current-artifact profile stamping are tested; broader commercial policy enforcement remains future work |
| Schemas | Partially implemented | Core model schemas plus the current timeline-first ReportArtifact semantic payload schema export to /schemas; #227/#239/#240/#241/#242 formalize the target Finding, InvestigationArtifact, minimal IncidentCase, stable timeline cross-link, and nullable case taxonomy contracts in code/specs; emitted runtime artifacts now use a compact packed report JSON envelope over that payload while full target-envelope migration remains deferred |
Detailed gap analysis and next work: docs/status.md.
Verification status is tracked in docs/status.md (single source of truth for latest counts).
Makefile tasks
make lint— run ruff lintmake fmt— run ruff formatmake test— run pytestmake test-goldens— placeholder target (goldens currently run through normal pytest suites)make build-wheel— build Python wheelmake build-binaries— build PyInstaller binarymake export-schemas— write JSON Schemas toschemas/
Regenerate schemas
python3 -m fixtracer.models.schemas # writes to ./schemas
Helpful docs (for humans)
docs/product_direction.md— strategic direction, terminology, and current-vs-target contractdocs/json_artifact.md— compact report JSON artifact contract and benchmark entrypointdocs/data_safety.md— local-first privacy posture and production-data handling rulesdocs/known_limitations.md— Technical Preview limitations and current non-goalsdocs/release_roadmap.md— release-ring plan for Technical Preview, Investigation Artifact Beta, and future workflow hardeningdocs/release_posture.md— Technical Preview positioning and public-surface guardrailsdocs/release_verification.md— SHA256 checksum verification for release artifactsdocs/status.md— current implementation status + prioritized remaining workdocs/critical_path.md— what ships, and in what orderdocs/bmvp_high_level.md— BMVP scope and what is outdocs/model_relations.md— current message/timeline/anomaly model plus target investigation-artifact directiondocs/specs/investigation_artifact.md— formalized targetFinding,InvestigationArtifact, minimalIncidentCase, timeline cross-link, and nullable case taxonomy contract for #227/#239/#240/#241/#242docs/epics/step0_generation/tech_stack.md— locked tech stack choicesdocs/specs/fix_spec.md— FIX rules we use for the BMVP
Metadata
Release files for fixtracer 0.1.0a3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fixtracer-0.1.0a3-py3-none-any.whl | Python 3 | none | any | Details for fixtracer-0.1.0a3-py3-none-any.whl |
Release files / fixtracer-0.1.0a3-py3-none-any.whl
| Download URL | fixtracer-0.1.0a3-py3-none-any.whl |
|---|---|
| Size | 454.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0de6f8b7a04300f10a2ee4a1ca8843c573859a144adc372921571e6410fb2689
|
|
BLAKE2b-256 checksum How to use checksums |
9efac6b6afcb568c9874f9178a0f6f5314f96f8c9abbe241999d42c5bc52a3c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logSecurity for fixtracer 0.1.0a3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 1 file in this release has been uploaded with provenance metadata.
Attestation for fixtracer-0.1.0a3-py3-none-any.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.