Ray has been watching me for four days.
The tells are there. He refreshes his email and then doesn't read what loaded. The stillness at his desk when he's not actually reading what's on his screens. He's good at the performance — twenty years in the field makes patience look like attention — but I've been working adjacent to Ray Okonkwo for two years and I know the difference between him thinking and him watching me think.
The lab runs on fluorescent light and server hum. At nine-thirty in the evening it's just the two of us, and the only sound is the AC cycle and the intermittent click of me uncapping and recapping the red pen without using it. The printouts are all on the east wall now — I moved them this morning after I got back from the apartment, shifted everything to one surface so I could see the full timeline without turning around. Fifty-three sheets. My handwriting on top of Marcus's code in red and in two colors of ink from the days before I started caring about keeping my annotations organized. Ray's desk is in my eyeline across the room, his framed photo of his kids visible from where I'm sitting, his workspace so ordered it has always made mine look like a crime scene on its own terms.
He's looking at me right now. I don't look up from the layer 12 printout — the one I left without margin notes. I'm looking at the two comment blocks. The October line and the August line. I've been looking at them for most of the evening without touching them with the pen.
He knows — the watching isn't about catching me at something, it's about accumulating enough evidence that what he says next is irrefutable. He closes his laptop at nine fifty-two. The click isn't casual. It's the sound of a decision being made.
"Nadia."
"Still working."
"I know." He crosses the room without hurry. Ray moves like a man who's decided to go somewhere — not fast, just committed. He stops at the edge of my workspace — the edge of the printout coverage — and looks at the east wall. Stands there looking at it for a moment. Fifty-three sheets. My red pen arcs connecting callbacks to function definitions to comment blocks to the two texts at layer 12 that I have written in blue in the margin: EVIDENCE and below it, the date he completed the function, and nothing else.
"How long have you been sitting with the layer 12 sheet?"
"I'm reviewing it."
"You've been reviewing it since six." He says this without accusation. That's the thing about Ray at full capacity — the observation is precise, not weaponized. He's building a case the way I build cases, and right now I'm the evidence. "You reviewed it yesterday. You reviewed it the day before, I'm guessing, since it was the last thing you looked at when I left and the first thing you looked at when I came in."
I put the pen down. "It's the most significant piece of evidence in the case."
"I know what it is." He pulls the chair from Derek's workspace and sits in it, facing me, which means the wall is over my shoulder. Marcus's code visible behind my head. "Tell me what you've concluded from it."
"You've read my summary reports."
"Tell me in person."
I look at him. He's done being patient. Not unkind — Ray doesn't do unkind — but his face carries a weight. The weight of something held for a long time. "October 2022: function complete. August 2023: the deployment commitment. Ten months between building it and using it. That gap is significant for intent. He sat with it."
"That's the report language."
"Because that's what the evidence shows."
"Nadia." He leans forward, elbows on his knees, hands open. "You're not investigating this case. You're having a conversation with him."
The AC cycle runs. I don't answer immediately and Ray waits, better at it than almost anyone I know.
"You're reading those comments the way you used to read his texts," he says. "Looking for the thing behind the thing. Asking what he meant versus what he said. That's not forensics. That's parsing."
"Understanding the author is part of code forensics. The style analysis, the psychological profile of the developer—"
"Is something any qualified forensic coder could do." He says it evenly. "Without the prior relationship compromising the read."
"Any qualified forensic coder couldn't have recognized the commenting style in the first place. The connection you're calling a compromise is the same thing that cracked the case."
"And now the case is cracked," Ray says, "and you're still sitting here at ten PM reading a piece of evidence you've looked at for three days without marking it up. Because you're not reading it as evidence."
He's right. The problem with Ray when he decides to say the true thing is that he's right. I know the layer 12 printout's content better than I know my own address. I've read it as evidence, as pattern data, as timestamps in a murder investigation. I've also read it the other way, the way you read something a person wrote to you, and I haven't been able to stay in one register or the other. They keep collapsing into each other.
"My expertise is my compromise," I say. "Is that what you're telling me."
"I'm telling you they're the same thing. Both true. I'm not arguing you shouldn't be on this case. I'm arguing that you need someone next to you reading the evidence you can't read straight."
"You've been that person for two weeks."
"I've been trying." He sits back. The chair creaks. "But you don't bring me in until after. You tell me your conclusions. You don't show me your process anymore." He looks at the wall. "That started around day seventeen."
Day seventeen was when I found the comment with the initial. The one that starts N. He's right about that too. I stopped showing my process around day seventeen.
The next morning Ray and I are in Reyes's office at eight. She has a plant on her windowsill that is somehow still alive — I've never been able to determine what it is, wide leaves, deep green, something that belongs somewhere with more humidity than a police precinct; it's been there for two years and she waters it on Tuesdays. She is at her desk, the plant behind her and the flat morning light through the window making her look like the still point around which everything else moves.
She listens to both of us. That's what she does when the decision is already made: listens fully, not to be persuaded, but because she believes in the record. When Ray finishes and I don't add to it, she looks at the plant for a moment.
"I assigned this case knowing your history with Chen." She says it to me, not accusatory, just putting it in the room where it belongs. "That was a calculation. You were the best code forensics investigator I have, and your history with the author was an advantage and a risk and I decided the advantage outweighed the risk. I still think that's right."
"So I stay on."
"You stay on the technical analysis." She turns back to us. "Ray runs the human investigation. Interviews, behavioral profiling, the institutional threads — MediCore's negligence, Russo's liability exposure. You handle the codebase. He handles everything the codebase can't tell you. You present jointly." She pauses. "The case needs your read of the code. It also needs a read of the code that can survive cross-examination. Those aren't the same read." The plant on her sill, the flat morning light through the window, Ray beside me — steady, saying nothing.
"The jury needs to understand why the code says what it says," Reyes continues. "That requires someone who can translate. It also requires someone who can be on the stand and answer the question about prior relationship without the defense using it to invalidate the entire forensic chain."
"They'll still ask the question."
"Yes. And you'll answer it correctly, and Ray will be the co-investigator who corroborated your findings. The question becomes less damaging when there's a second set of eyes on record." She looks at me with the eyes that miss nothing and reveal less. "This isn't about whether I trust your analysis. It's about making sure the analysis survives the room it needs to survive."
She's been watching too, same as Ray, just from further away. The calculation she made at the beginning — Kowalski's personal connection is an asset — is being refined. Not abandoned. Refined. She does this with everything: makes the initial decision, then adjusts for what the evidence shows. Reads situations like codebases. Patches without dismantling.
"Fine," I say. It comes out flat and I don't soften it. "Ray takes the human side."
"You work together," she says. "Not separately. Together."
By ten the next evening the lab has emptied. Ray left at seven for a parent-teacher conference — he goes to parent-teacher conferences, youth soccer games, his wife's gallery openings. He builds things outside this building. I used to find it baffling and now I find it enviable, which is progress of a kind. I sit with the east wall.
Fifty-three printouts. My handwriting on top of his code, layer after layer — the margin notes getting shorter as I went deeper, the professional dropping off around layer ten, the personal crowding in, until the layer 12 printout at the bottom right sits clean except for the case number and the evidence labels in blue. A crime scene reconstruction. Also the most complete portrait of Marcus Chen that exists outside his own head.
The closest we've been in three years is this wall. It sounds like something I would say in a way that would embarrass me if Ray heard it, so I don't say it. I think it, because it's true, and then I look at the wall and let it be true without adding to it.
The fluorescent lights do their thing. I stopped hearing the buzz years ago but in the silence of an emptied lab, the frequency is back at the edge of my awareness.
Ray is right that I've been reading the comments the wrong way. He's also right that there's no other way to read them and be the person who reads them. The same quality that makes me able to trace the emotional arc of a developer across eighteen months of version history is the quality that makes the emotional arc personal when the developer is someone I knew in a different context. I can't debug the personal out of the professional. I've tried for three weeks and the trying has mostly produced exactly what he identified: me sitting with evidence I can't mark up, at ten PM, not moving. The pen is in my hand before I've decided to pick it up.
I pull a new printout from the stack on the desk — the full layer 12 section, fresh copy — and I flatten it on the desk and look at the comment blocks. The October completion note. The August timestamp. The five lines in October that end with I hope you find this. The two lines in August that are the entirety of what he had left to say by then.
They are still evidence — that hasn't changed because of how long I've been sitting with them — and my handwriting will be on this printout when I'm done with it, because that's what the pen is for. I've been treating the layer 12 sheet like something too fragile to mark, like my annotations would damage the content. That's not forensics. That's something else.
I uncap the pen. I put the tip to the margin next to the October comment and I write the first annotation: completion timestamp -- cross-ref git blame commit history, exhibits B-14 through B-19. Standard notation. The pen moves without resistance. The second annotation, next to I hope you find this: intent language — note: conditional, not directive. Cross-ref psychological assessment. Third annotation, next to the August block: ten-month gap between completion and deployment — see Ray's behavioral timeline analysis for this period. I write that and don't take it back.
Eleanor Anderson died first. Then Brooks. Then Margaret Chen — his grandmother, managed by the system her grandson built. Then Davis, Evans, Foster. Then Ruth Goldberg, who survived the worst thing human beings ever did to each other and whose death made the pattern visible. Seven people with last words that nobody thought to record as last words because they weren't supposed to be.
I keep writing. The August block annotation fills half the margin, my handwriting getting smaller, the forensic language staying forensic all the way through. When I cap the pen the printout is done: properly annotated, case number at the top, exhibit classification at the bottom.
The east wall gets the fresh copy mounted next to the clean one. Painter's tape across the top edge, pressed flat. Two versions of the same document: one I couldn't touch and one I could. Both true. The investigation continues because the seven dead deserve it, because that's the job, and because — even compromised, even reading in both registers — I'm still the best person for this work.
The AC runs its cycle. I pick up my phone and text Ray: bring coffee tomorrow, I'm annotating exhibits tonight. He texts back in four minutes, which means he was still awake: the good place or the break room?
I text back: the good place.
Then I pull the next printout from the stack.