This is Part 6 of Blood Work, and the last of The Extraction. Part 3 ended with a request in the mail and a thirty day clock running. Part 4 was the 200 entry cap, where the export quietly kept the newest 200 results and dropped the rest. This one is stranger, because nothing here is truncated and nothing here is wrong.
The clonoSEQ portal held ten MRD results, September 2022 through November 2025, and I was fairly confident my first test was June 2016, at diagnosis. Six years of the most sensitive measurement in the dataset, sitting somewhere outside the portal.
The request came back. So did the six years. And the two sets, the one the portal shows and the one the lab sent, do not overlap by a single day.
The measurement
clonoSEQ is a sequencing assay for measurable residual disease.* At diagnosis it reads your marrow, finds the DNA sequence that identifies your particular leukemia clone, and files it. From then on every sample is measured against that fingerprint, and the result is a count: residual clonal cells per million nucleated cells, with a confidence interval.
It is the highest resolution number in seventeen years of my records. A CBC tells you roughly how many white cells you have. This tells you how many of them are the specific cancer you had, down to single digits per million.
Which is why the six missing years mattered enough to write a letter about.
Ten results, all of them good
Here is the entire clonoSEQ record as the patient portal presents it.
| collected | result |
|---|---|
| 2022-09-19 | No Residual Sequence Detected |
| 2022-09-19 | No Residual Sequence Detected |
| 2023-02-24 | No Residual Sequence Detected |
| 2023-07-06 | No Residual Sequence Detected |
| 2023-10-26 | No Residual Sequence Detected |
| 2023-12-20 | No Residual Sequence Detected |
| 2024-02-21 | No Residual Sequence Detected |
| 2024-06-07 | No Residual Sequence Detected |
| 2024-12-27 | No Residual Sequence Detected |
| 2025-11-11 | No Residual Sequence Detected |
Ten for ten. Three years of undetectable, every test, no exceptions.
If you knew nothing else, you would read that table as a person who has never had a detectable cancer. There is no trend in it, because a flat line has no trend. There is nothing to plot.
Twenty one reports, and a shape
Adaptive fulfilled the request through Zix secure email on August 4. Twenty five files, twenty one unique reports once you notice that one of them arrived in five byte-identical copies. Those twenty one reports cover twenty collections: the diagnostic specimen was run twice, once for the heavy chain and once for the light chain, and issued a report for each. They run from June 2016 to June 2022 and they stop exactly where the portal starts.
Here is the same measurement, from the same lab, on the same person, for the years the portal does not carry.
| collected | specimen | result | per million |
|---|---|---|---|
| 2016-06-16 | FFPE slides | dominant sequence identified | |
| 2017-04-18 | bone marrow | no residual | <2 |
| 2017-07-11 | bone marrow | no residual | <2 |
| 2017-09-27 | bone marrow | no residual | <2 |
| 2018-01-10 | bone marrow | no residual | 0 |
| 2018-03-07 | blood | no residual | 0 |
| 2018-05-16 | bone marrow | residual detected | <1 |
| 2018-06-27 | bone marrow | residual detected | 3 |
| 2018-07-25 | blood | residual detected | 4 |
| 2018-10-05 | bone marrow | no residual | 0 |
| 2019-02-06 | bone marrow | residual detected | 24 |
| 2019-03-07 | blood | residual detected | 3 |
| 2020-04-27 | blood | no residual | 0 |
| 2020-05-26 | blood | no residual | 0 |
| 2020-06-29 | blood | no residual | 0 |
| 2020-07-28 | bone marrow | residual detected | <1 |
| 2020-10-21 | bone marrow | residual detected | 2 |
| 2021-01-05 | bone marrow | residual detected | 563 |
| 2021-10-04 | bone marrow | residual detected | 758,033 |
| 2022-06-15 | blood | no residual | 0 |
That last stretch is worth reading twice. Five hundred and sixty three per million in January 2021. Seven hundred and fifty eight thousand per million nine months later, with a 95% confidence interval of 500,828 to 1,000,000 and a note on the report reading "New dominant sequence found. Significance unknown." Three hundred and sixty four thousand copies of the dominant sequence out of four hundred and eighty thousand cells evaluated.
Then June 2022: zero.
Then the portal picks up eleven weeks later and says No Residual Sequence Detected, ten times in a row, for three years.
Neither source is broken
This is the part I want to be careful about, because it is not the same failure as Part 4 and the difference is the whole point.
The 200 entry cap was a defect. The export claimed to be a health summary, silently kept the newest 200 results, dropped 62 percent of Providence including every observation from the diagnosis year, and printed no notice that it had done so. You can be angry at that. Somebody chose 200.
Nothing like that happened here. The portal is complete and correct for the period it covers. Every one of those ten results is real, current, and accurate. The lab delivery is complete and correct for the period it covers. No cap, no truncation, no silent drop, nothing withheld. Both documents are exactly what they claim to be.
And reading either one alone gives you a false picture of the disease.
Portal only: a flat line of undetectable results, no history, nothing to explain. Lab delivery only: a marrow that went from 563 to three quarters of a million in nine months, followed by a single zero, and then nothing at all. One of those looks like a person who was never sick. The other looks like a story that stops mid sentence.
The union is the only honest reading, and neither source mentions that the other exists. There is no pointer. The portal does not say "records before September 2022 are available by request." The lab delivery does not say "later results are in MyChart." Each one is silent about its own boundary, which means the boundary is invisible unless you happen to hold both.
That is a different class of problem from a truncation bug, and I think a harder one. A cap you can detect: count the entries, notice it is exactly 200, get suspicious. A boundary between two complete sources is undetectable from inside either source. The only signal is a date that stops, and dates stop for legitimate reasons all the time.
The report that audits itself
There is one gap in the delivery, and I only found it because Adaptive built the audit into their own document.
Every tracking report carries a roster of the specimens that came before it, so a clinician reading one result can see the sequence it belongs to. On the April 2017 report it reads:
06/16/2016: 02635-01MH-S16-062690_B1 | 01/05/2017: 02635-02MH | 04/18/2017: 02635-03MH
There is no 02635-02MH in what I received. The accession numbers otherwise run gapless from 01 to 21, which is twenty numbers carrying twenty one reports, because 01 issued two. A specimen was collected on January 5, 2017, it was tracked, and its report is not in the set.
I found that by parsing the reports for their own roster lines and diffing against the filenames on disk. The dataset audits itself. No external index, no request to the lab, no need to know in advance how many reports should exist. The documents enumerate their own siblings, and the ones that do not show up are the answer.
I have asked for it. It may turn out that no report was ever issued, which happens: a specimen can be cancelled, or come back with insufficient material. That is a fine answer. I would just rather have it written down than have a hole in a series and a guess about why.
Worth noting the other direction too. One report arrived five times. A delivery that duplicates one file four extra times is a delivery assembled by a human clicking through a list, and the same pass that double grabs one item is exactly the pass that skips one.
An empty array is not an empty result
The technical half of this was extracting the portal side, and there is one trap in it worth writing down because it has the same shape as everything else in this subseries.
The portal's own internal API returns test results as JSON. Ask it for the detail of a given order and you get the order name, the collection date, the performing lab, the specimen type, the ordering physician, and an array of the actual measured values.
For results that came from another organization, that array comes back empty unless you also pass that organization's ID. Not an error. Not a permission denial. HTTP 200, a well formed response, correct metadata, and zero values in a field that is supposed to hold them.
My first full sweep of 1,731 orders produced 16 measured values. The correct number is 12,026. Nothing failed. Nothing logged. The difference between those two numbers was one missing parameter, and the only reason I caught it is that 16 was so absurd it could not be true.
The document viewer endpoint has the same trap with a different spelling. It wants organizationId. Pass orgId and it returns the literal value null, no error, and 33 of 43 attachments quietly do not download.
Which is the Part 4 lesson again in a different costume. A system that answers your wrong question with a plausible right shaped answer is more dangerous than one that errors. The 200 entry cap printed no notice. The empty array raises no exception. In both cases the output is well formed, confident, and missing most of itself, and the only defense is a number that looks off and somebody willing to chase it.
A human clicks Download, again
Part 5 was about the download button that does not work under automation. The clicks register, the page reacts, no file lands. I hit it again here, twice, and learned one more thing about it: some of the clicks were not landing at all. Driving the page by element reference silently did nothing on this portal, while clicking the same button by screen coordinate worked. Which means "the download failed" may sometimes have been "the button was never pressed," and those are different bugs with the same symptom.
The way around it turned out to be sideways. Browsers have a file system access API: ask the user to pick a folder, get a handle back, write to it directly. One human click, then unlimited writes, no download machinery involved at all. Thirty megabytes of results, reports and scans went to disk that way while the session was still running, which mattered more than I expected, because the portal logged me out twice mid extraction with no warning. The first time it cost a ten minute sweep held in browser memory. The second time it cost nothing, because everything already on disk was already on disk.
Write as you go. Not at the end. The end is exactly where the session dies.
Where that leaves it
Thirty one reports, June 2016 to November 2025, in one file. The complete sequence of the most sensitive measurement in the record, assembled from two sources that each held about half and neither of which knew the other existed.
The Zix message the lab sent does not expire until August 2027. The Epic exports in Part 4 expired in seven days. I do not have a tidy theory about why the highly regulated genomics lab gives you a year and the electronic health record gives you a week, but I notice it every time I look at the two folders.
There is one number in that file I still want to check by eye before I trust it in a chart. In four of the reports the measured value is not in the text at all. It is rendered as a marker inside the trend graphic, and the surrounding text gives only the confidence interval. I pulled those four out of the drawing. They are almost certainly right. Almost certainly is a fine standard for a folder and a bad one for a plot.
That is the end of The Extraction. Seven organizations, four Epic exports, one secure email, 288 megabytes of XML, thirty one PDFs, and one number that went from 563 to 758,033 while nobody's patient portal was watching.
Next subseries is modeling: what all of it turned out to be, and what it takes to make seven institutions agree on what a head CT is called.
Provider names and accession numbers appear as they appear in my records.
Notes
- The clonoSEQ results here are my own, and the clinical narrative around them is mine to tell. Nothing in this post is a comment on the assay, which did its job, or on the people who ordered it, who did theirs.↩