They were used to mark people officers called "problems."
Defense attorneys.
Journalists.
Community organizers.
A former prosecutor.
Keller gave investigators the location of an old departmental backup server.
The server had supposedly been decommissioned.
It had not.
Investigators recovered thousands of messages.
Some were vulgar.
Some racist.
Some merely cruel.
Others were evidence.
Officers discussed hiding cash shortages.
Coordinating stories after questionable searches.
Deleting body-camera recordings.
Targeting residents who filed complaints.
And on one thread, Lieutenant Palmer wrote:
Judges change. Paper lasts only if you let it.
Adrian read the message in chambers.
Then looked at Claire.
"How many cases?"
She looked exhausted.
"We don't know anymore."
That answer would once have frustrated him.
Now it frightened him.
Because the deeper investigators went, the larger the damage became.
This was no longer about punishing a handful of corrupt officers.
It was about repairing years of decisions made by courts that had trusted information now shown to be unreliable.
Every invalid search.
Every guilty plea influenced by falsified evidence.
Every person who lost a job because of an arrest.
Every family that spent savings on lawyers.
Corruption did not end when money changed hands.
Its consequences multiplied outward.
Adrian closed the file.
"Then keep counting."
Five months after the hallway encounter, the first major corruption trial began.
Lieutenant Evan Palmer and Sergeant Steven Doyle were tried together on charges including conspiracy, evidence tampering, theft, official misconduct, and obstruction.
Adrian remained the presiding judge after repeated appellate challenges to his assignment failed.
The courtroom looked very different from that rainy Monday morning.
Security was tighter.
The gallery was packed daily.
National reporters attended.
Outside, protesters gathered on both sides.
Some demanded convictions.
Others insisted officers were being sacrificed for political optics.
Adrian ignored both crowds.
The jury would decide guilt.
His job was to make sure they received admissible evidence and lawful instructions.
Nothing more.
Nothing less.
Grant Keller became the prosecution's most controversial witness.
When he entered the courtroom, cameras were not allowed, but everyone watched.
He walked past former colleagues.
Nobody greeted him.
On the stand, he described the Street Crimes culture.
The pressure to produce numbers.
The unofficial seizure quotas.
The hidden accounting.
The retaliation against anyone who complained.
Then prosecutors presented the spreadsheets recovered from Palmer's storage locker.
Doyle's attorney attacked Keller mercilessly.
"You're a racist, aren't you?"
Keller looked at him.
"I behaved like one."
The answer caused several jurors to glance up.
The attorney continued.
"You harassed Judge Cole."
"Yes."
"You attempted to detain him."
"Yes."
"You signed false police documents."
"Yes."
"You stayed silent while citizens were mistreated."
"Yes."
The lawyer spread his arms.
"Yet now we're supposed to treat you as a hero?"
"No."
"Then what are you?"
Keller thought.
"A witness."
The lawyer looked dissatisfied.
Keller continued:
"A witness who should have spoken sooner."
Adrian watched carefully.
He had spent years seeing witnesses minimize.
Deflect.
Qualify.
Keller did surprisingly little of that.
Perhaps because he understood there was no reputation left to protect.
The prosecution called Linda Carmichael.
She explained the missing complaint files.
Then forensic accountants.
Then residents.
One was a barber named Thomas Greene.
Six years earlier, Street Crimes officers stopped him while he carried $2,400 in cash.
He had been buying equipment for his shop.
Police seized the money, claiming suspected narcotics activity.
No drugs were found.
No charges were filed.
Only $1,500 was eventually returned.
For years Greene had been told the discrepancy was administrative.
The spreadsheets showed otherwise.
Nine hundred dollars had been marked in an internal column:
REDISTRIBUTED
Greene stared at the document.
"What does that mean?"
The prosecutor looked toward Palmer.
"That is what we're asking the jury to determine."
Another witness was a twenty-one-year-old nursing student.
At seventeen, she had been pulled from a car and handcuffed after officers claimed they smelled marijuana.
None was found.
The arrest report stated she consented to the search.
She said she had not.
Recovered messages showed one officer joking:
Consent is easier to remember after the search.
The courtroom went silent.
Palmer's defense argued that crude messages did not prove a conspiracy.
That individual officers had made mistakes.
That spreadsheets were misunderstood.
That missing money could result from accounting errors.
Then his attorney presented the central defense.
Grant Keller.
If the unit was systematically corrupt, why trust a corrupt officer describing it?
The argument was strong.
Adrian knew it.
So did prosecutors.
That was why the case did not depend on Keller alone.
Records matched his testimony.
Videos matched it.
Financial transactions matched it.
Linda's notebooks matched it.
Citizens' complaints matched it.
Keller was not the foundation.
He was one brick in a structure built from independent evidence.
On the eighth day, Palmer unexpectedly requested to testify.
His lawyers objected privately.
He insisted.
On the stand, he was confident.
Polished.
He described himself as a demanding but honest supervisor.
He blamed paperwork errors on understaffing.
Offensive messages on "dark police humor."
Missing evidence on outdated systems.
Then the prosecutor asked:
"Lieutenant Palmer, did you ever instruct officers to target people unlikely to challenge seizures?"
"No."
"Never?"
"Never."
The prosecutor displayed a recovered message.
Hit Madison hard. Students, rentals, cash workers. People with real lawyers waste our time.
Palmer stared.
"That's taken out of context."
"What is the correct context?"
"It was operational shorthand."
"For what?"
"Prioritizing resources."
The prosecutor displayed another.
Avoid Oak Park. Too many cameras and attorneys.
Palmer shifted.
"Again—"
Then another.
Madison pays. Oak Park complains. Easy math.
Palmer's confidence began to crack.
The prosecutor returned to the table.
"Easy math?"
Palmer said nothing.
"Is that what constitutional policing meant to your unit?"
Defense objected.
"Sustained," Adrian said.
The prosecutor nodded.
"No further questions."
The defense rested two days later.
Closing arguments took an entire morning.
Then Adrian instructed the jury.
He did not mention the hallway incident.
It was irrelevant to their decision.
He explained burden of proof.
Conspiracy.
Intent.
Witness credibility.
The jurors left.
The courtroom waited.
Six hours.
No verdict.
They returned the next morning.
At 11:17 a.m., the foreperson stood.
Palmer guilty on multiple counts.
Doyle guilty on multiple counts.
Not guilty on two lesser charges.
The result satisfied neither extreme.
Some protesters wanted conviction on everything.
Some supporters wanted acquittal on everything.
But courts were not built to satisfy crowds.
They were built, imperfectly, to evaluate charges one at a time.
Adrian thanked the jury.
Then he looked toward the defendants.
Sentencing would occur later.
As deputies prepared to escort them out, Palmer turned toward Keller.