jspurefix 5.11.1 → 5.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/dist/buffer/fixml/fixml-parser.js +1 -1
- package/dist/buffer/fixml/fixml-parser.js.map +1 -1
- package/dist/config/empty-log-factory.d.ts +2 -2
- package/dist/config/empty-log-factory.js +1 -1
- package/dist/config/empty-log-factory.js.map +1 -1
- package/dist/config/get-js-fx-logger.d.ts +2 -2
- package/dist/config/get-js-fx-logger.js.map +1 -1
- package/dist/config/js-fix-logger-factory.d.ts +2 -2
- package/dist/config/js-fix-logger-factory.js.map +1 -1
- package/dist/config/js-fix-logger.d.ts +9 -8
- package/dist/config/js-fix-logger.js +4 -4
- package/dist/config/js-fix-logger.js.map +1 -1
- package/dist/config/js-fix-winston-log-factory.d.ts +2 -2
- package/dist/config/js-fix-winston-log-factory.js +2 -2
- package/dist/config/js-fix-winston-log-factory.js.map +1 -1
- package/dist/config/winston-logger.d.ts +5 -2
- package/dist/config/winston-logger.js +55 -9
- package/dist/config/winston-logger.js.map +1 -1
- package/dist/dictionary/fragment-safety.d.ts +26 -0
- package/dist/dictionary/fragment-safety.js +154 -0
- package/dist/dictionary/fragment-safety.js.map +1 -0
- package/dist/dictionary/index.d.ts +1 -0
- package/dist/dictionary/index.js +1 -0
- package/dist/dictionary/index.js.map +1 -1
- package/dist/runtime/make-config.js +1 -1
- package/dist/runtime/make-config.js.map +1 -1
- package/dist/runtime/session-launcher.js +1 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/sample/http/oms/http-client.js +1 -1
- package/dist/sample/http/oms/http-client.js.map +1 -1
- package/dist/sample/http/oms/http-server.js +1 -1
- package/dist/sample/http/oms/http-server.js.map +1 -1
- package/dist/sample/tcp/qf-md/md-client.js +1 -1
- package/dist/sample/tcp/qf-md/md-client.js.map +1 -1
- package/dist/sample/tcp/qf-md/md-server.js +1 -1
- package/dist/sample/tcp/qf-md/md-server.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-client.js +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-client.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-server.js +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-server.js.map +1 -1
- package/dist/sample/tcp/skeleton/skeleton-session.js +1 -1
- package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-server.js +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
- package/dist/store/fix-msg-memory-store.js +1 -1
- package/dist/store/fix-msg-memory-store.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session.js +1 -1
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/http/http-acceptor-listener.js +1 -1
- package/dist/transport/http/http-acceptor-listener.js.map +1 -1
- package/dist/transport/http/http-acceptor.js +2 -2
- package/dist/transport/http/http-acceptor.js.map +1 -1
- package/dist/transport/http/http-initiator.js +1 -1
- package/dist/transport/http/http-initiator.js.map +1 -1
- package/dist/transport/http/http-json-sample-adapter.js +1 -1
- package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
- package/dist/transport/session/fix-session.js +3 -3
- package/dist/transport/session/fix-session.js.map +1 -1
- package/dist/transport/session/session-registry.js +1 -1
- package/dist/transport/session/session-registry.js.map +1 -1
- package/dist/transport/tcp/recovering-tcp-initiator.js +1 -1
- package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
- package/dist/transport/tcp/tcp-acceptor-listener.js +2 -2
- package/dist/transport/tcp/tcp-acceptor-listener.js.map +1 -1
- package/dist/transport/tcp/tcp-acceptor.js +2 -2
- package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator-connector.js +2 -2
- package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator.js +1 -1
- package/dist/transport/tcp/tcp-initiator.js.map +1 -1
- package/docs/instrumentation.md +346 -0
- package/docs/scattered-components.md +280 -0
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +1 -1
- package/src/buffer/fixml/fixml-parser.ts +1 -1
- package/src/config/empty-log-factory.ts +2 -2
- package/src/config/get-js-fx-logger.ts +2 -2
- package/src/config/js-fix-logger-factory.ts +8 -2
- package/src/config/js-fix-logger.ts +23 -8
- package/src/config/js-fix-winston-log-factory.ts +3 -3
- package/src/config/winston-logger.ts +85 -10
- package/src/dictionary/fragment-safety.ts +225 -0
- package/src/dictionary/index.ts +1 -0
- package/src/runtime/make-config.ts +1 -1
- package/src/runtime/session-launcher.ts +1 -1
- package/src/sample/http/oms/http-client.ts +1 -1
- package/src/sample/http/oms/http-server.ts +1 -1
- package/src/sample/tcp/qf-md/md-client.ts +1 -1
- package/src/sample/tcp/qf-md/md-server.ts +1 -1
- package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +2 -1
- package/src/sample/tcp/recovering-skeleton/skeleton-client.ts +1 -1
- package/src/sample/tcp/recovering-skeleton/skeleton-server.ts +1 -1
- package/src/sample/tcp/skeleton/skeleton-session.ts +1 -1
- package/src/sample/tcp/trade-capture/trade-capture-client.ts +2 -1
- package/src/sample/tcp/trade-capture/trade-capture-server.ts +2 -1
- package/src/store/fix-msg-memory-store.ts +2 -1
- package/src/transport/ascii/ascii-msg-transmitter.ts +2 -1
- package/src/transport/ascii/ascii-session.ts +2 -1
- package/src/transport/http/http-acceptor-listener.ts +2 -1
- package/src/transport/http/http-acceptor.ts +2 -1
- package/src/transport/http/http-initiator.ts +2 -1
- package/src/transport/http/http-json-sample-adapter.ts +1 -1
- package/src/transport/session/fix-session.ts +2 -1
- package/src/transport/session/session-registry.ts +1 -1
- package/src/transport/tcp/recovering-tcp-initiator.ts +2 -1
- package/src/transport/tcp/tcp-acceptor-listener.ts +4 -2
- package/src/transport/tcp/tcp-acceptor.ts +2 -1
- package/src/transport/tcp/tcp-initiator-connector.ts +4 -2
- package/src/transport/tcp/tcp-initiator.ts +2 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Scattered components — analysis and plan of attack
|
|
2
|
+
|
|
3
|
+
**Status: analysis, with phase 0 landed.** Nothing in the parser has changed. This note
|
|
4
|
+
sets out a generalisation of the fragmented component repair already shipped, why it is
|
|
5
|
+
believed tractable, what it would cost, and the order the work would land in. It is
|
|
6
|
+
written to port — the same shape applies to cspurefix.
|
|
7
|
+
|
|
8
|
+
There is no urgency behind it. The library has been in use for eight years and exactly one
|
|
9
|
+
counterparty has produced the shape that motivated the existing repair. This is the
|
|
10
|
+
argument being written down while it is fresh, not a queue-jumping defect.
|
|
11
|
+
|
|
12
|
+
## Where this starts
|
|
13
|
+
|
|
14
|
+
A component is a fiction of the dictionary. Nothing goes on the wire to say one has begun
|
|
15
|
+
or ended, so the segment parser infers a component's extent from *position*: a tag falling
|
|
16
|
+
between the first and last tag attributed to a component belongs to it. Every well behaved
|
|
17
|
+
counterparty emits a component's tags adjacently and the inference holds.
|
|
18
|
+
|
|
19
|
+
One did not. It sent a message in which the `Instrument` tags arrived in two runs with
|
|
20
|
+
unrelated fields between them, and the positional model could not represent that. The fix,
|
|
21
|
+
ported from cspurefix, was to stop describing such a component by a range and describe it
|
|
22
|
+
by the actual tags and their positions — `SegmentView` in
|
|
23
|
+
[`src/buffer/segment/segment-view.ts`](../src/buffer/segment/segment-view.ts), built by
|
|
24
|
+
`TagIndex` and attached in `AsciiSegmentParser.fragments()`. Applications see no
|
|
25
|
+
difference; `MsgView` was already position-agnostic.
|
|
26
|
+
|
|
27
|
+
That repair is deliberately narrow. It fires only for a component at depth 1 of the
|
|
28
|
+
message, only when the same component is re-entered after being exited, and only once per
|
|
29
|
+
component name.
|
|
30
|
+
|
|
31
|
+
## The general shape
|
|
32
|
+
|
|
33
|
+
The narrowness is the question. If `Instrument` can arrive scattered at the top level of a
|
|
34
|
+
message, nothing stops `SecurityXLinkage` arriving scattered *within* a scattered
|
|
35
|
+
`Instrument`, and nothing stops that recursing. Each level is a dictionary fiction with no
|
|
36
|
+
wire representation, so each level has the same freedom. Russian dolls, laid out flat.
|
|
37
|
+
|
|
38
|
+
The condition under which this is even possible is worth stating exactly, because it is
|
|
39
|
+
also the condition that makes it solvable:
|
|
40
|
+
|
|
41
|
+
> Contiguity is only forced where framing exists, and framing only exists where it is
|
|
42
|
+
> needed.
|
|
43
|
+
|
|
44
|
+
A repeating group is the sole self-describing construct in tag-value FIX — `NoXXX` plus a
|
|
45
|
+
fixed delimiter tag. That is the one place the wire *requires* a bounded, ordered run.
|
|
46
|
+
Everywhere else the layout is convention.
|
|
47
|
+
|
|
48
|
+
The complementary half is what makes the general case tractable:
|
|
49
|
+
|
|
50
|
+
> Within one level of a message, a component occurs at most once.
|
|
51
|
+
|
|
52
|
+
If a sender needs it twice there is no mechanism but a group. So tag ambiguity — *which*
|
|
53
|
+
`Instrument` does this tag belong to — arises only inside groups, and groups are exactly
|
|
54
|
+
where scattering cannot happen. **Scattering and ambiguity are disjoint.** Where position
|
|
55
|
+
stops being evidence, tag identity starts being sufficient.
|
|
56
|
+
|
|
57
|
+
## The model
|
|
58
|
+
|
|
59
|
+
`SegmentDescription` presently conflates two things: identity of a node in the dictionary
|
|
60
|
+
tree, and a contiguous `[startPosition, endPosition]` interval. Containment is *inferred*
|
|
61
|
+
from the interval — `contains()`, feeding `Structure.firstContainedWithin` and
|
|
62
|
+
`MsgView.resolveChild`.
|
|
63
|
+
|
|
64
|
+
The generalisation: a segment owns an **ordered set of positions**, and an interval is the
|
|
65
|
+
compressed representation of the dense case. Containment becomes set inclusion. Stated in
|
|
66
|
+
one line:
|
|
67
|
+
|
|
68
|
+
> The moment position stops implying structure, the parent/child edges have to be
|
|
69
|
+
> materialised instead of re-derived from offsets.
|
|
70
|
+
|
|
71
|
+
`SegmentView` took the first step — positions instead of a range. It did not take the
|
|
72
|
+
second, which is why it cannot nest.
|
|
73
|
+
|
|
74
|
+
There is precedent in the codebase already. Group instances are not really intervals
|
|
75
|
+
either: `SegmentDescription.getInstance` derives an instance's bounds by carving the parent
|
|
76
|
+
with `delimiterPositions`. A segment whose extent is computed rather than assigned is a
|
|
77
|
+
shape the engine already carries.
|
|
78
|
+
|
|
79
|
+
### Own tags
|
|
80
|
+
|
|
81
|
+
Define, for a dictionary set `S`, its **own tag set** `O(S)`: every simple tag reachable
|
|
82
|
+
from `S` through components *without crossing a group boundary*, plus the `NoXXX` tag of
|
|
83
|
+
each directly reachable group — but not the group's interior tags.
|
|
84
|
+
|
|
85
|
+
This is the distinction `flattenedTag` does not draw, and it is the crux. A group's members
|
|
86
|
+
are framed and are never evidence about the level above. `O(S)` is implemented as
|
|
87
|
+
`FragmentSafety.ownTags`.
|
|
88
|
+
|
|
89
|
+
It also subsumes a special case the current code carries. A component that wraps a single
|
|
90
|
+
group owns exactly `{NoXXX}` — non-empty, and locatable — so `TagIndex.isComponentGroupWrapper`
|
|
91
|
+
stops needing to exist.
|
|
92
|
+
|
|
93
|
+
### The claim
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
claim(S, U): # U = ordered position set; root: the message body
|
|
97
|
+
for p in U with tag(p) ∈ O(S):
|
|
98
|
+
if tag(p) is NoXXX for group G:
|
|
99
|
+
run ← maximal delimiter-framed extent from p # contiguous, guaranteed
|
|
100
|
+
assign run to G; for each instance i: claim(instance_i, run_i)
|
|
101
|
+
else:
|
|
102
|
+
assign p to the child of S owning tag(p)
|
|
103
|
+
for each component child C of S:
|
|
104
|
+
claim(C, positions assigned to C's subtree) # ← universe restriction
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Recursion is over the dictionary tree, with the universe narrowing at each step. The doll
|
|
108
|
+
falls out for free: `SecurityXLinkage` is claimed from `Instrument`'s claimed positions,
|
|
109
|
+
not from the message. Group interiors are consumed as whole runs before any component
|
|
110
|
+
claim sees them, so framed tags cannot leak upward.
|
|
111
|
+
|
|
112
|
+
When everything is contiguous this degenerates to what the linear parser already computes.
|
|
113
|
+
|
|
114
|
+
## What the current code does not do
|
|
115
|
+
|
|
116
|
+
Five things, roughly in order of how likely each is to be met:
|
|
117
|
+
|
|
118
|
+
1. **`TagIndex.getInstance` claims by `flattenedTag` across the whole message.**
|
|
119
|
+
`flattenedTag` is transitive through groups, so a fragmented component containing a
|
|
120
|
+
group would claim every member tag in the message. `isComponentGroupWrapper` guards
|
|
121
|
+
this, but only for single-field wrappers. Universe restriction fixes it structurally.
|
|
122
|
+
2. **Detection is depth-1 only.** `exitedDepth1Components` is keyed by bare name and only
|
|
123
|
+
populated at `structureStack.length === 1`. Keying by stack path registers re-entry at
|
|
124
|
+
any depth.
|
|
125
|
+
3. **Shadow fragments survive.** Repair attaches a view to one description; the other
|
|
126
|
+
fragments keep their original ranges and still participate in `boundLayout`, so a
|
|
127
|
+
nested lookup can be handed the wrong one.
|
|
128
|
+
4. **`contains` is interval arithmetic.** A scattered parent's hull can swallow unrelated
|
|
129
|
+
siblings, so `firstContainedWithin` can answer a lookup that should be null.
|
|
130
|
+
5. **The one-instance-per-name guard is right for the wrong reason.** It reads as a
|
|
131
|
+
limitation; it is the at-most-once property above. Worth a comment before someone
|
|
132
|
+
"fixes" it.
|
|
133
|
+
|
|
134
|
+
## Blast radius
|
|
135
|
+
|
|
136
|
+
Measured, not estimated. Outside `src/buffer/segment/`, everything that *reads* an
|
|
137
|
+
interval:
|
|
138
|
+
|
|
139
|
+
| Site | What it does |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `msg-view.ts` `allStrings` | already branches on `segmentView` |
|
|
142
|
+
| `msg-view.ts` `binarySearch` | already branches on `segmentView` |
|
|
143
|
+
| `msg-view.ts` `stringify` | display only |
|
|
144
|
+
| `segment-description.ts` `contains` | feeds `Structure` and `resolveChild` |
|
|
145
|
+
|
|
146
|
+
Everything else touching positions is a writer (`ascii-parser`, `fixml-parser`) or
|
|
147
|
+
diagnostics (`SegmentSummary`). Two of the four read sites already carry the sparse branch,
|
|
148
|
+
so this replaces an `if` rather than introducing a concept.
|
|
149
|
+
|
|
150
|
+
Unchanged: the dictionary layer, the encoder, session and transport, every generated type,
|
|
151
|
+
and the public `MsgView` API. The FIXML path builds structure from the XML tree and never
|
|
152
|
+
has the problem.
|
|
153
|
+
|
|
154
|
+
## Plan of attack
|
|
155
|
+
|
|
156
|
+
Phasing works here because three of the four pieces have an existing oracle. Only one phase
|
|
157
|
+
is irreducible.
|
|
158
|
+
|
|
159
|
+
### Phase 0 — does the assumption hold? *(landed)*
|
|
160
|
+
|
|
161
|
+
The claim attributes by tag identity, which is sound only while siblings own disjoint tags.
|
|
162
|
+
FIX's numbering conventions — `Underlying*`, `Leg*`, `NestedParties2/3` — exist to
|
|
163
|
+
guarantee that, but a house dictionary is under no obligation to honour them. So measure it
|
|
164
|
+
before building on it.
|
|
165
|
+
|
|
166
|
+
[`src/dictionary/fragment-safety.ts`](../src/dictionary/fragment-safety.ts) walks every
|
|
167
|
+
message, component and group instance body in a dictionary and reports sibling tag
|
|
168
|
+
collisions. It is exported, so anyone with a house dictionary can run it against their own.
|
|
169
|
+
|
|
170
|
+
The QuickFIX rendering is the one that matters. A broker onboarding pack is now almost
|
|
171
|
+
always a prepared QuickFIX XML rather than a reference to a spec version, so that is the
|
|
172
|
+
flavour the engine actually meets. Every QuickFIX dictionary shipped here is covered, plus
|
|
173
|
+
the repository renderings for comparison:
|
|
174
|
+
|
|
175
|
+
| Dictionary | Form | Collisions |
|
|
176
|
+
| --- | --- | --- |
|
|
177
|
+
| `qf42`, `qf43`, `qf44` | QuickFIX | 0 |
|
|
178
|
+
| `fix5-mod` (modified test dialect) | QuickFIX | 0 |
|
|
179
|
+
| `repo44`, `repo50sp2` | repository | 0 |
|
|
180
|
+
| `qf50sp2` | QuickFIX | **57** |
|
|
181
|
+
|
|
182
|
+
(`data/FIX44-MD.xml` is byte-identical to `data/FIX44.xml`, so it is not a separate sample.)
|
|
183
|
+
|
|
184
|
+
Every one of the 57 is the same root cause: the QuickFIX `FIX50SP2.xml` dictionary puts
|
|
185
|
+
`Currency(15)` inside `Instrument` *and* declares it again beside the component, in
|
|
186
|
+
`NewOrderSingle`, `ExecutionReport`, `Quote` and 54 other places. 14 of the 57 are inside
|
|
187
|
+
group instance bodies rather than at message level — `NewOrderList.ListOrdGrp.NoOrders` and
|
|
188
|
+
the like — which is exactly where a recursive repair would be working. The repository
|
|
189
|
+
rendering of the same FIX version does not do it, so this is an authoring difference rather
|
|
190
|
+
than a property of FIX 5.0.
|
|
191
|
+
|
|
192
|
+
Two conclusions, and the second is the uncomfortable one.
|
|
193
|
+
|
|
194
|
+
The positional parser is untroubled by any of this — whichever `15` falls within
|
|
195
|
+
`Instrument`'s span is `Instrument`'s. A repair attributing by tag identity cannot tell. So
|
|
196
|
+
`Instrument` has to be refused for repair in those sets specifically, which argues for the
|
|
197
|
+
collision map being consulted per set at repair time rather than being a whole-dictionary
|
|
198
|
+
yes/no.
|
|
199
|
+
|
|
200
|
+
And the pattern that produced it — a field declared at message level that a component
|
|
201
|
+
already carries — is ordinary dictionary authoring, not an exotic mistake. A broker adding
|
|
202
|
+
fields to a message to suit their own flow is *more* likely to write it than a spec
|
|
203
|
+
committee is, and the broker dialects are the ones most likely to also send the scattered
|
|
204
|
+
messages this whole exercise is about. On the evidence here the collision map is not a
|
|
205
|
+
defensive nicety at the edge of the design; it is load-bearing.
|
|
206
|
+
|
|
207
|
+
### Phase 1 — the accessor seam
|
|
208
|
+
|
|
209
|
+
Give `SegmentDescription` `owns(pos)` and `forEachPosition(cb)`; move the four `msg-view`
|
|
210
|
+
sites onto them; dense implementation loops the range without allocating. Zero behaviour
|
|
211
|
+
change, existing suite is a complete oracle. Ships alone, and afterwards every later change
|
|
212
|
+
is local rather than cross-cutting.
|
|
213
|
+
|
|
214
|
+
### Phase 2 — the index, behind the existing call site
|
|
215
|
+
|
|
216
|
+
Rebuild `TagIndex` as the recursive, universe-restricted claim above, then keep
|
|
217
|
+
`getInstance(name)` as a thin wrapper calling `claim(rootSet, wholeMessage)`. Same entry
|
|
218
|
+
point, same callers, new engine.
|
|
219
|
+
|
|
220
|
+
Not purely behaviour-preserving: universe restriction fixes the `flattenedTag` over-claim
|
|
221
|
+
as a side effect, so it needs its own test rather than "existing fixtures still green".
|
|
222
|
+
|
|
223
|
+
**The detail that makes this not-wasted work:** write `claim` with the `universe` parameter
|
|
224
|
+
and a per-node result from day one, even though the phase 2 caller only ever passes the
|
|
225
|
+
whole message and collapses the result. The signature carries the generality before a
|
|
226
|
+
caller needs it. Built instead as a straight optimisation of today's global sweep, phase 3
|
|
227
|
+
rewrites it.
|
|
228
|
+
|
|
229
|
+
### Phase 3 — detection, repair at depth, containment edges
|
|
230
|
+
|
|
231
|
+
Atomic. Path-keyed detection without repair-at-depth never fires; repair-at-depth without
|
|
232
|
+
detection is dead code; and repair that leaves containment alone lets nested lookups pick
|
|
233
|
+
up siblings that merely fall inside a scattered parent's hull.
|
|
234
|
+
|
|
235
|
+
Since repair from the shallowest fragmented ancestor recursively fixes everything beneath,
|
|
236
|
+
an over-eager detector is wasteful rather than wrong. Bias it toward false positives.
|
|
237
|
+
|
|
238
|
+
## Why not replace the linear parser outright
|
|
239
|
+
|
|
240
|
+
One algorithm would be cleaner than two. Three reasons against:
|
|
241
|
+
|
|
242
|
+
1. **It is the hot path.** The linear stack pass is single-pass and allocation-light.
|
|
243
|
+
Claim-based parsing needs sorted indices and per-node universes.
|
|
244
|
+
2. **The linear pass is what detects malformation.** A pure claim algorithm accepts almost
|
|
245
|
+
anything and produces a plausible object. `SegmentType.Gap` and unknown-tag handling
|
|
246
|
+
depend on stream order. Losing that turns protocol errors into silently wrong data,
|
|
247
|
+
which is strictly worse than the bug being fixed.
|
|
248
|
+
3. **Repair is self-limiting.** Only flagged subtrees pay.
|
|
249
|
+
|
|
250
|
+
## Honest limits
|
|
251
|
+
|
|
252
|
+
**Repair is exact; detection is heuristic.** Given the at-most-once property, the claim is
|
|
253
|
+
sound once pointed at a subtree. Deciding *which* subtrees to point it at relies on
|
|
254
|
+
observing re-entry in the stack machine, and at depth the machine may unwind past the
|
|
255
|
+
nested node before the stray tag arrives, so re-entry surfaces at whatever ancestor still
|
|
256
|
+
claims the tag. That part wants a test matrix rather than an argument.
|
|
257
|
+
|
|
258
|
+
**Round-tripping.** A repaired message re-encodes canonically contiguous. Byte-for-byte
|
|
259
|
+
replay of the original is gone for those messages; retain the raw body where that matters.
|
|
260
|
+
|
|
261
|
+
**Malformed groups are not scattering.** A broken delimiter run is corruption and must stay
|
|
262
|
+
a hard parse error. The two look similar on the wire and conflating them would convert real
|
|
263
|
+
protocol errors into wrong objects.
|
|
264
|
+
|
|
265
|
+
## Open decisions
|
|
266
|
+
|
|
267
|
+
1. Should a collision found by phase 0 refuse repair for the colliding pair only, or for
|
|
268
|
+
the whole set containing them? The `qf50sp2` result argues for the pair — refusing all
|
|
269
|
+
of `NewOrderSingle` over one contended tag would give up a great deal for very little.
|
|
270
|
+
2. Should the collision map be computed once at dictionary load, or lazily on first repair?
|
|
271
|
+
3. Should a dictionary with collisions say so at load time? An operator onboarding a broker
|
|
272
|
+
dialect would want to know before a live session does, and phase 0 is cheap enough to
|
|
273
|
+
run eagerly — but it is only meaningful to anyone who has read this note.
|
|
274
|
+
4. Does a repaired segment report its hull or its true extent through `SegmentSummary`,
|
|
275
|
+
which is a diagnostic surface people read?
|
|
276
|
+
5. Should scattering be *reported* at all — a counterparty emitting non-adjacent components
|
|
277
|
+
is worth knowing about even when the repair succeeds, and today it is silent.
|
|
278
|
+
6. Is `stringify` on a scattered segment supposed to render wire order or claimed order?
|
|
279
|
+
7. Does cspurefix take the same phase split, or land phases 1 and 2 together given its
|
|
280
|
+
different `MsgView`?
|
package/jsfix.test_client.txt
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
6
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
10
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
11
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
18
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
20
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
27
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
31
|
-
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
35
|
-
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
36
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
37
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
41
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
42
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
43
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
45
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
47
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
48
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
49
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
51
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
53
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
57
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
60
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
1
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:27.902|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:27.907|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:27.908|7=1|16=1|10=245|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260816-15:15:27.912|122=20260816-15:15:27.912|123=Y|36=2|10=111|
|
|
5
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:29.912|58=test_server confirming logout|10=089|
|
|
6
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:32.610|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:32.612|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
8
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:32.612|7=1|16=0|10=232|
|
|
9
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260816-15:15:32.615|122=20260816-15:15:32.614|123=Y|36=2|10=102|
|
|
10
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:34.613|58=test_server confirming logout|10=083|
|
|
11
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:37.013|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
|
|
12
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:37.014|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:37.014|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:37.469|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:37.470|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
16
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:38.472|58=test_server confirming logout|10=090|
|
|
17
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:15:39.016|58=test_client initiate logout|10=103|
|
|
18
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:41.185|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
19
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:41.186|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
20
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:42.188|58=test_server confirming logout|10=089|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:44.802|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
22
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:44.804|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
23
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260816-15:15:45.805|58=test_client initiate logout|10=103|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:48.213|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
25
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260816-15:15:48.214|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=155|
|
|
26
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:49.215|58=test_server confirming logout|10=087|
|
|
27
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:51.610|98=0|141=Y|553=js-client|554=pwd-client|10=165|
|
|
28
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:51.611|45=1|372=A|373=1|58=msgType A missing required tag 108|10=255|
|
|
29
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:56.099|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
30
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:56.100|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=144|
|
|
31
|
+
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:56.102|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=147|
|
|
32
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:15:58.102|58=test_server confirming logout|10=083|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:00.723|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:00.724|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
35
|
+
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:00.725|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=069|
|
|
36
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:02.726|58=test_server confirming logout|10=085|
|
|
37
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:04.724|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
38
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:09.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:09.142|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
|
|
40
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:09.143|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=029|
|
|
41
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:11.143|58=test_server confirming logout|10=078|
|
|
42
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:13.538|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
|
|
43
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:13.539|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=154|
|
|
44
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:16:15.542|112=Sun, 16 Aug 2026 15:16:15 GMT|10=154|
|
|
45
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:17.546|112=Sun, 16 Aug 2026 15:16:17 GMT|10=163|
|
|
46
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:19.539|58=test_server confirming logout|10=094|
|
|
47
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:21.932|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
48
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:21.933|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=101|
|
|
49
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:23.938|112=Sun, 16 Aug 2026 15:16:23 GMT|10=161|
|
|
50
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:25.940|112=Sun, 16 Aug 2026 15:16:25 GMT|10=159|
|
|
51
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260816-15:16:27.942|112=Sun, 16 Aug 2026 15:16:27 GMT|10=166|
|
|
52
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260816-15:16:29.935|58=test_server confirming logout|10=098|
|
|
53
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:32.535|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=053|
|
|
54
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:32.536|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=105|
|
|
55
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:16:34.540|112=Sun, 16 Aug 2026 15:16:34 GMT|10=154|
|
|
56
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:36.543|112=Sun, 16 Aug 2026 15:16:36 GMT|10=162|
|
|
57
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:37.546|112=Sun, 16 Aug 2026 15:16:37 GMT|10=166|
|
|
58
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260816-15:16:38.550|112=Sun, 16 Aug 2026 15:16:38 GMT|10=165|
|
|
59
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:40.538|58=test_server confirming logout|10=088|
|
|
60
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:18:33.776|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
61
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:18:33.784|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
|
|
62
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:18:34.788|58=test_server confirming logout|10=099|
|
package/jsfix.test_server.txt
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
6
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
10
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
11
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
18
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
20
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
27
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
31
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
1
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:27.902|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:27.907|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:27.908|7=1|16=1|10=245|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260816-15:15:27.912|122=20260816-15:15:27.912|123=Y|36=2|10=111|
|
|
5
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:15:29.910|58=test_client initiate logout|10=105|
|
|
6
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:29.912|58=test_server confirming logout|10=089|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:32.610|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
|
|
8
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:32.612|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
9
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:32.612|7=1|16=0|10=232|
|
|
10
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260816-15:15:32.615|122=20260816-15:15:32.614|123=Y|36=2|10=102|
|
|
11
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:15:34.612|58=test_client initiate logout|10=100|
|
|
12
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:34.613|58=test_server confirming logout|10=083|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:37.013|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:37.014|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:37.014|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
16
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:37.469|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
17
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:37.470|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
18
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:38.471|58=test_client initiate logout|10=106|
|
|
19
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:38.472|58=test_server confirming logout|10=090|
|
|
20
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:41.185|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:41.186|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
22
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:42.187|58=test_client initiate logout|10=105|
|
|
23
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:42.188|58=test_server confirming logout|10=089|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:44.802|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
25
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:44.804|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
26
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260816-15:15:45.805|58=test_client initiate logout|10=103|
|
|
27
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:48.213|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
28
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260816-15:15:48.214|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=155|
|
|
29
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:15:49.214|58=test_client initiate logout|10=103|
|
|
30
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:49.215|58=test_server confirming logout|10=087|
|
|
31
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:51.610|98=0|141=Y|553=js-client|554=pwd-client|10=165|
|
|
32
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:51.611|45=1|372=A|373=1|58=msgType A missing required tag 108|10=255|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:15:56.099|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:15:56.100|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=144|
|
|
35
35
|
8=FIX4.4|9=0000136|35=ZZ|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|
|
|
36
|
-
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
37
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
36
|
+
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:15:56.102|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=147|
|
|
37
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:15:58.101|58=test_client initiate logout|10=099|
|
|
38
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:15:58.102|58=test_server confirming logout|10=083|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:00.723|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
|
|
40
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:00.724|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
41
41
|
8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|999=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
|
|
42
|
-
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
43
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
45
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
42
|
+
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:00.725|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=069|
|
|
43
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:02.725|58=test_client initiate logout|10=101|
|
|
44
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:02.726|58=test_server confirming logout|10=085|
|
|
45
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:09.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
46
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:09.142|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
|
|
47
47
|
8=FIX4.4|9=0000123|35=0|49=init-not!|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
|
|
48
|
-
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
49
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
51
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
53
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
57
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
60
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
63
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
64
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
65
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
66
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
67
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
68
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
69
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
70
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=
|
|
71
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
72
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
73
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
74
|
-
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
75
|
-
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
48
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:09.143|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=029|
|
|
49
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:11.142|58=test_client initiate logout|10=094|
|
|
50
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:11.143|58=test_server confirming logout|10=078|
|
|
51
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:13.538|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
|
|
52
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:13.539|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=154|
|
|
53
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:16:15.542|112=Sun, 16 Aug 2026 15:16:15 GMT|10=154|
|
|
54
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:17.546|112=Sun, 16 Aug 2026 15:16:17 GMT|10=163|
|
|
55
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260816-15:16:19.538|58=test_client initiate logout|10=112|
|
|
56
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:19.539|58=test_server confirming logout|10=094|
|
|
57
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:21.932|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
58
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:21.933|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=101|
|
|
59
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:23.938|112=Sun, 16 Aug 2026 15:16:23 GMT|10=161|
|
|
60
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:25.940|112=Sun, 16 Aug 2026 15:16:25 GMT|10=159|
|
|
61
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260816-15:16:27.942|112=Sun, 16 Aug 2026 15:16:27 GMT|10=166|
|
|
62
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:16:29.934|58=test_client initiate logout|10=111|
|
|
63
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260816-15:16:29.935|58=test_server confirming logout|10=098|
|
|
64
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:16:32.535|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=053|
|
|
65
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:16:32.536|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=105|
|
|
66
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:16:34.540|112=Sun, 16 Aug 2026 15:16:34 GMT|10=154|
|
|
67
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260816-15:16:36.543|112=Sun, 16 Aug 2026 15:16:36 GMT|10=162|
|
|
68
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:16:37.546|112=Sun, 16 Aug 2026 15:16:37 GMT|10=166|
|
|
69
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260816-15:16:38.550|112=Sun, 16 Aug 2026 15:16:38 GMT|10=165|
|
|
70
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260816-15:16:40.537|58=test_client initiate logout|10=106|
|
|
71
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260816-15:16:40.538|58=test_server confirming logout|10=088|
|
|
72
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260816-15:18:33.776|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
73
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260816-15:18:33.784|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
|
|
74
|
+
8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260816-15:18:34.787|58=test_client initiate logout|10=115|
|
|
75
|
+
8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260816-15:18:34.788|58=test_server confirming logout|10=099|
|