Act 0 · Null Witness
Chapter 0.3
The Contest
I woke up at seven-forty-three to the sound of the building’s water pressure doing whatever it does every morning at seven-forty-three, which is a series of clanking protests from the pipes inside the wall above my desk that I had been meaning to report to the building manager for approximately four months and had not reported because doing so would require a conversation. Through the north-facing windows the sky was the flat gray-white of marine layer that hadn’t decided yet whether it was going to burn off. LA in May performs this same theater every morning, the oppressive overcast, the ambient damp, the twenty-minute window where the city looks like it belongs somewhere with worse weather, and then the sun breaks through and within an hour the pavements are white and the shadows are sharp and the whole performance is forgotten.
I lay on my back on the mattress on the floor, I owned a bed frame, it was in three pieces against the wall, I’d been planning to assemble it since I moved in, and stared at the ceiling and thought about the tab I left open.
Then I got up.
The loft had a quality in the morning that it lost as the day progressed, and I wasn’t always awake early enough to catch it. The screens went dark after twenty minutes of inactivity and the servers had their own sleep cycle, so for the hour before I sat down and brought everything up, the room was as close to quiet as it got. The server tower in the corner still ran, it always ran, that machine had not been fully powered down since I bought it, but the two auxiliary units on the shelf above it dropped to low power overnight and their hum descended to a frequency you feel more than hear, a bass note that lives in the floor and the soles of your feet. The room smelled the way rooms smell when electronics have been running in them for years and the windows don’t get opened often enough: faintly warm, faintly chemical, not unpleasant once you’ve gotten used to it, which I had.
I went to the bathroom.
The light in there was fluorescent and honest and had no interest in flattering anyone. I took off my glasses and set them on the edge of the sink and studied myself in the mirror for longer than I usually permit.
Here is what I remember spending a significant amount of time staring at that particular morning: the dark circles under my eyes, which I genuinely cannot remember not having. They were present at MIT. They were present at sixteen in Cleveland. They are the kind of feature that communicates something about the relationship between a person’s intentions and their actual habits, and every morning I take off my glasses they are there to remind me of that gap. Without the glasses they were worse, which is either because the glasses provide cover or because I never look closely enough when I’m wearing them.
The rest of me didn’t look much better. The body I remembered, the version from two years earlier, from the era before the dropout and the loft and the attrition of irregular meals and irregular sleep, wasn’t there. What stood in front of me was thinner than that. Not lean. Thin in the way of malnourishment rather than discipline, the floating ribs slightly more visible than they had any business being, the abdomen flat not from work but from the absence of sufficient food, the legs not quite the structure I remembered them being when I’d actually been somewhere with a gym and a meal plan and a coherent sleep schedule.
Cade's loft · Entrada · Morning
I stood there for approximately three seconds longer than was useful.
Then I turned around and got in the shower.
I emerged in yesterday’s dark jeans, which were on the floor where I’d left them. The bed frame was still in three pieces against the wall and functioned at this point less as future furniture and more as the world’s largest and most structurally awkward coat rack. I pulled a shirt off one of its corners, dark gray, clean, probably, and put it on without checking closely.
I filled the electric kettle at the kitchen sink and set it going. The kitchen was one counter, a two-burner stove I used for coffee and occasionally nothing else, a refrigerator that came with the apartment and whose ice maker has never worked. On the counter: the two phones in their charging positions, a mug from a campus coffee cart that I’d been reusing since sometime last spring, a takeout container from last night that I moved to the top of the recycler without looking at it too closely. The kettle began its climb, a low shudder first, almost inaudible, then the growing hiss of water finding heat, then the rolling boil that filled the small space with steam that condensed on the window above the sink and ran in thin clear lines down the glass.
1847 Entrada Street, unit 3B · While the kettle boils · Morning
While I waited I checked both phones. The work phone, the one that exists for bug bounty correspondence and the occasional legitimate freelance contact, had a notification from a security researcher’s mailing list I follow and nothing else. The other phone, the one that goes everywhere and has two layers of encryption and a SIM I rotate every sixty days, had a notification from the encrypted channel.
I looked at it.
Slash had processed the Nestfield package overnight. The message was brief, this is consistent with how he operates, which is to say he communicates exactly what needs to be communicated and no more, and what needed to be communicated that morning was a transaction confirmation and a number.
Ɲ3,829. Confirming transfer. Client was satisfied, clean work. I’ll be in touch on the other thing.
I took the coffee to the desk. I sat. I opened the Nova wallet on the secondary monitor.
The balance updated. I considered it for a moment like someone doing arithmetic they already know the answer to. Ɲ4,128.77, the Ɲ3,829 from the Nestfield job plus what I had left from the last bounty. Rent was Ɲ2,100. Utilities ran another three-fifty. That left just under seventeen hundred, which was approximately six weeks of the cheap-coffee-and-noodle-bowl diet I have apparently committed to, and nothing much else. Not nothing. Just not much else. A bowl of ramen ran Ɲ9. Rent was two thousand one hundred of them. That was the whole arithmetic, and I already knew the answer.
I set the phone down. I drank the coffee. I took in the screen where the Dark Cypher tab was still open from last night, patient and clean and waiting exactly where I left it.
Here is a thing about decisions that I have observed over the course of my life.
You rarely make them. They make themselves, somewhere below the level of conscious deliberation, and then they surface as conclusions that feel inevitable by the time you’re aware of them. You think you’re deciding. What you’re actually doing is noticing what you’ve already decided and giving yourself permission to act on it.
I had decided about Dark Cypher somewhere between closing the tab the second time and opening it the third. I just hadn’t said so yet.
I spent the morning taking the page apart.
This was not the same as deciding to enter. Taking something apart is research. Research is due diligence. Due diligence is what a responsible person does before committing to anything, which means the taking apart is still technically a neutral act and I can reserve judgment about what comes after it until after the taking apart is complete. This is what I told myself. I was reasonably convinced by it.
The onion address resolved cleanly every time I hit it, which was worth noting. Onion services are usually flaky, the relay paths they ride fluctuate, nodes drop offline for everything from hardware failure to law enforcement, and the hidden service degrades along with them. One that resolves reliably has either been running long enough to settle into stable paths or is being kept stable on purpose. Dark Cypher’s address had been live for eleven days. It resolved like it had been live for two years.
Someone was paying for that stability. Stability in this environment isn’t free and it isn’t accidental.
The page itself, examined carefully, was a document of careful omissions. It described the competition’s structure, tiers, advancement criteria, the nature of the intelligence to be gathered, without specifying who ran it or under whose auspices the prize was being offered. There was no organization name attached. No contact point. The registration form asked for an alias and a proof-of-work, a technical demonstration that you can do what you’re claiming you can do, formatted as a small challenge embedded in the page itself, a locked puzzle that functioned as a gate between browsers and participants.
The page noted a two-hour completion window for the gate challenge.
I solved it in eleven minutes. It was a reversing problem, compiled code, stripped of symbols, requiring you to work backward from the program’s behavior to its logic to the value it’s checking for. Not trivial. Not especially hard if you’ve spent time doing this kind of work, which I have. I wrote the solution in a notepad window and sat back and considered it for a while before I typed anything into the registration form.
The proof-of-work gate was interesting not because of its difficulty but because of its specificity. It was the kind of problem that selects for a particular skill set, not general intelligence, not even general programming ability, but the combination of patience and low-level technical fluency that describes a certain type of person. The people who can solve it quickly and move on are not the same people who can brute-force it slowly. The gate is designed to filter for the former.
Whoever built it knew exactly what kind of person they wanted.
I want to say something for the record, since I’ve been describing this in a way that might give you the wrong impression.
I’m not especially good at this. I know I talk about it sometimes like the ground just opens and I walk in. People have told me I come across as a know-it-all. I’ve been working on that with limited success. The truth is simpler: I am good at a narrow subset of problems in a narrow corner of a field, because those problems interest me and I’ve spent a disproportionate number of hours on them. Put me in front of a soldering iron and ask me to wire a XOR gate and I will produce something that looks like the aftermath of a conflict. That’s what Ki is for.
Hackers are all different from each other and exactly alike at the same time. The constant, the thing that’s actually shared, is a particular kind of curiosity. Not as a personality trait. As a compulsion. The need to take something apart to understand what it is before you can be satisfied that you understand it at all. The difference between one hacker and another is just what they apply that compulsion to. Mine lands on low-level systems, the layer of abstraction above electric signals and below human-facing software, where hexadecimal and assembler are the relevant language and the machine is speaking plainly enough to be understood if you learn how to listen. I’ve spent more hours reading disassembled code than I’ve spent talking to most people I know. Not because I’m a genius. Because I find it interesting.
“The Mentor” wrote about this in 1986, in a piece that ran in Phrack and has been quoted by people who never read the original ever since. He ended with: “we’re all alike.” He was right. The curiosity is the constant. Everything else is just niche.
I thought about the two-hour window. Then I typed KernelHavoc into the alias field.
The confirmation came back in under a minute. A welcome message, spare and impersonal, formatted in the same clean dark-theme style as the rest of the site. It contained an onion address for a participant forum, a set of credentials generated for my alias, and a brief description of the competition’s first tier.
I followed the forum link.
The participant forum was, not what I expected, exactly, though I’m not sure what I expected. Forty-one registered aliases, listed in the order of their registration. Mine was near the bottom. At the top, the earliest registrants: handles I didn’t recognize, handles I did, a handful that existed only as two-word combinations in the style that the underground has always used for this kind of thing. Clinical. Combative. The poetry of people who communicate through the names they choose when nobody’s watching.
Near the top of the list: GhostVector. A name I’d seen on two different security research forums in the last year, attributed to work that was technically impressive and deliberately anonymous, the kind of research that gets cited without anyone being able to say for certain who produced it. If that was the same person, which it may not be, then this competition had at least one participant who was operating several levels above hobbyist.
I reached for the black notebook I keep to the left of the keyboard, the one I use for the quick-fire observations that belong on paper before they’ve earned a place in a file, and wrote: GhostVector, real. Seen the work. Tier 1 will tell.
Below it on the list: 0xSable. A handle I’d seen once, in a thread on a signals intelligence forum, attributed to analysis work that was precise in a way that suggested either professional training or someone who’d taught themselves past the point where the distinction matters. I wrote: 0xSable, unknown quantity. Watch.
Then: RatchetWrench, Decibel, VIRID, TerminalKing. Nothing in my memory for any of these. I wrote: The rest, no data. The forum itself was mostly quiet at this hour, a few threads, sparse replies, the polite unfriendly atmosphere of strangers who have been told they’re competing against each other and haven’t yet decided how much of themselves to reveal.
I read through the existing threads without posting. There is an advantage in being silent in a space like this. The people who announce themselves early are the people who want to be seen. The people who don’t announce themselves are either here for the work or here to watch the people announcing themselves, and both of those are more useful positions than the announced one.
The first tier description was brief and precise. It directed participants to a node buried in the dark net, not an address you could navigate to from the surface web, not a service indexed anywhere, a location that exists only if you know how to look for it, and instructed them to retrieve a key stored there. The key was the proof of completion for tier one. What the node was protected by, what stood between the participant and the key, was not described. That’s the challenge. You find out when you get there.
I spent the afternoon getting there.
Tor buries your traffic under three or four hops of volunteer relays, each one peeling off a layer, until the origin can’t be trivially traced back. The dark net rides on top of it: hidden services with .onion addresses that no search engine indexes and no one reaches without already having the address.
Picture a building with no street number, no listing, no sign on the door. The only way in is that someone who knows tells you, and the only way they know is that someone told them. Trust chains all the way down. That’s the topology I’m navigating.
The first relay address from the Dark Cypher briefing resolves immediately. Clean, stable, fast. Someone is paying for good hosting infrastructure and not cutting corners on it. The page that loads is a single text field and a submit button, a challenge, no labels, no explanation. Just a blank box and the implicit instruction: put the right thing here.
Outside, through the windows, the marine layer burned off around ten and the sun came through in the way it does when it’s been behind cloud cover all morning, assertive, slightly aggressive, as if making up for lost time. The light that fell across the loft floor was pale gold, the kind of light that makes dust visible, and there was apparently quite a lot of dust. I made a mental note. I would not do anything about it.
By noon the light had shifted west and the loft was warmer than I’d like. The windows were painted shut, another maintenance request I’d been deferring. I took off the hoodie and draped it over the back of the chair and sat in a t-shirt with the desk fan running and the slight persistent ache of not having eaten breakfast, which I addressed by eating a granola bar from a box I keep in the desk drawer for precisely this kind of situation.
The desk fan was old. It oscillated on a forty-five degree arc with a faint clicking sound on each rotation, a loose gear somewhere in the housing that had been loose since I bought it secondhand and that will apparently be loose until the mechanism finally gives out entirely. The click had become part of the room’s sound landscape the way the server hum has, another layer in the ambient composition of the loft, the low-frequency soundtrack of my working hours. Click, hum, the distant sound of the city outside, the occasional notification ping from one of the two phones, the creak of the building settling around me.
The first relay’s challenge is a ciphertext. A block of characters that look random but aren’t, the visual texture of encoded data has a different quality to it than actual random noise, if you’ve spent enough time looking at both. This one is short. Twenty-six characters.
Relay-01 Challenge:
> 5f71 6b33 7235 5f74 306c 645f 796f 755f 736f 6d33 7468 316e 675f
Enter passphrase to proceed:
I study it for sixty seconds. The character distribution is uniform, no letter frequencies that would suggest a simple substitution cipher. The groupings are in pairs separated by spaces, each pair representing a byte in hexadecimal. I run it through a hex-to-ASCII converter.
$ echo "5f71 6b33 7235 5f74 306c 645f 796f 755f 736f 6d33 7468 316e 675f" | xxd -r -p
_qk3r5_t0ld_you_som3th1ng_
Twenty-six characters. A passphrase, formatted in the leetspeak style of a man who learned operational security on forums in the 2010s and never entirely left that aesthetic behind. I type it into the field. The page refreshes.
Relay-01: ACCEPTED
Next node: [encrypted address — decrypt with relay-01 key]
Relay-01 key: 9a4f2c8d1e7b3f6a
The next address is encrypted using the relay key as input. I decrypt it, two minutes with a simple XOR operation against the key, because elegant operational security doesn’t always mean complex cryptography, and the second relay address resolves.
The second relay is harder.
The second relay’s challenge greeted me with a logic puzzle, rendered in plain text in a monospaced font that made it look like something out of a 1980s mainframe terminal. The problem was a variant on a constraint-satisfaction problem, a set of variables with interdependent relationships, solvable by working the constraints backward from the required output. The kind of problem that looks impenetrable as a whole and straightforward in pieces. I worked through it in a notepad window, piece by piece, variable by variable, the pen-and-paper equivalent of the terminal work.
It took forty minutes. I ate lunch somewhere in the middle of it without really registering the eating.
The third relay is where it gets interesting.
Relay-03: DEAD DROP PROTOCOL
This relay does not contain your next address directly.
Retrieve the artifact at the following path and derive the address from it.
Path: /srv/drop/KernelHavoc/
Note: artifacts are participant-specific and ephemeral.
Retrieve within 60 minutes or re-request.
A dead drop, old tradecraft, made digital. You leave something where the right person will find it and nobody has to meet: a chalk mark on a mailbox, a folded newspaper on a bench. Here it’s a file staged on a server down the relay chain, waiting for me, named for my alias, placed there the moment I cleared relay two.
I retrieved the artifact. It was a small binary file, sixty-four bytes, no extension. I ran it through analysis tooling on my main machine and it resolved into a structure: a timestamp, a seed value, a hash.
The passphrase for the final node’s archive is derived from this hash. Not the hash itself, a derivation of it, processed through a key derivation function with a parameter that’s hidden somewhere in the competition’s briefing documents. I’ve read those documents three times. I go back and read them a fourth time, looking for something that could be a parameter.
It’s in the gate challenge. The proof-of-work puzzle I solved when I registered. The solution I wrote in a notepad window and didn’t close. The final value of the challenge output, the integer answer to the last step of the reversing problem, is the parameter.
I didn’t throw it away. I never throw working notes away. This habit has saved me more times than I can count.
$ python3 derive_key.py --seed 9a4f2c8d1e7b3f6a --hash a7c3f2918b4d6e0f --param 448291
Derived passphrase: dc7e3a9f1b2c4d8e5f6a7b8c9d0e1f2a
The archive opens.
The node described in Dark Cypher’s first tier took four hours to find and one hour to get into. Inside the archive: the completion token, exactly as described. A long alphanumeric string, personalized to my alias, machine-generated, proof that I was here and found this.
I also found something that wasn’t in the briefing.
A second file. Small, just a few kilobytes, no name beyond a timestamp. I opened it.
It was a fragment of what appeared to be network capture data, raw packet captures, the kind of thing a network analysis tool produces when it’s recording traffic. A few seconds of data, nothing more. No context, no explanation for why it was here. It shouldn’t be here. The briefing said the archive contained the completion token and nothing else.
I studied it for a long time. Then I copied it alongside the completion token, put both in the encrypted container on the shelf drive, and labeled the second file with a question mark.
Someone left something extra in my dead drop. Either by accident or because they wanted me to find it.
Neither explanation is comforting.
Someone designed this carefully, I thought, while I was looking at the network capture. And not recently. The relay infrastructure was too stable for recent construction, the hidden service architecture too clean for improvisation. This was built before the competition was announced. This was built knowing that it would need to hold up under the kind of scrutiny that technically capable participants would bring to it.
Eleven days, the onion address had been live. But the infrastructure behind the first tier had been in place considerably longer than eleven days.
That was the thing that was wrong with the page. It finally named itself, sitting there in my head.
The competition was not designed in the last eleven days. The competition was designed a long time ago. The registration page, the prize, the gate challenge, the forum, all of it, was a front end placed on top of infrastructure that predated it. Someone built the maze first and then opened the door.
I copied the completion token. I pasted it into the tier completion form on the Dark Cypher site.
The page refreshed. A progress indicator moved. A brief message appeared: Tier One complete. Stand by for Tier Two briefing.
I sat back.
The fan clicked on its arc. The server hummed. The afternoon light was moving across the floor in the slow way that afternoon light does, carrying the dust motes through the air in its column and making the room look, for a moment, like something out of an older world. I could be in any room. Any city. Any version of this same life. The details of the loft, the three servers, the cable runs, the whiteboard with its layers of half-erased diagrams, were just the current set.
I’d been doing this since I was fifteen, in some form or another. Different rooms. Different equipment. The same quality of attention, the same patience, the same satisfaction that comes from solving a problem that required sustained effort. It doesn’t get old. That’s either my best quality or my most dangerous one, and I’m not always sure there’s a difference.
The question mark file sat in the encrypted container on the shelf drive. I hadn’t decided what it meant yet. I hadn’t decided if it mattered.
My watch buzzed. A notification from the encrypted channel.
Slash again.
I think I might have a lead on a new opportunity for you. Something a bit more stable. I’ll have them reach out to you if you’re okay with it. Full-disclosure though: they’re looking for the person behind KernelHavoc, not you, so it’s Havoc that I have to introduce…Up to you.
I looked at the message for a long moment. Then I pulled up the Nova wallet on the secondary monitor. Ɲ4,128.77 minus rent minus utilities minus six weeks of groceries. The number that remained was not inspiring.
I made a sound that is technically not a word.
Everyone has to out-grow themselves eventually, I typed back. Go ahead and introduce me.
I sent it before I could think about it more carefully, which was the correct amount of thinking for this particular decision. KernelHavoc had been useful. KernelHavoc had been the name on the exploit submissions and the forum posts and the CVE attributions and the three years of work that doesn’t exist anywhere that matters. If a legitimate opportunity required disclosing the person behind that handle, then it was time to file KernelHavoc in the archive and become Cade Voss at a professional level.
That’s not a loss. It’s just a transition.
I wrote in the notebook: Alias: retiring KernelHavoc. Whoever Slash is introducing me to, they know the work. Treat accordingly.
I set the phone down.
Cade's loft · The Dark Cypher progress tracker · Dusk
On the main monitor, the Dark Cypher forum had updated. A new thread had appeared in the participant section. I glanced at the registrant list’s progress tracker, a feature I hadn’t noticed on the first pass, probably because I hadn’t needed it yet, and I saw that most of the forty-one registered aliases were where I’d expect them: nowhere, or just starting Tier 1, or a few days into it.
Then I saw the alias I expected to find here.
Near the top: Vanta.
I expected it to be there, you seed something, you enter it, that’s how these things work. What I didn’t expect was the timestamp column.
Tier 1: complete. Nine days ago.
I looked at that number for a moment.
Tier 2: complete, all challenges. Four days ago.
Current position: Tier 3, challenge four of seven.
I wrote in the notebook, in capital letters, without punctuation: Vanta NINE DAYS AHEAD.
Vanta, the word means a specific kind of black. The blackest black. The kind that absorbs so much light it reads as an absence rather than a color. Somebody named themselves after a material designed to be invisible.
I sat back and did the arithmetic. The prize structure was: seven Tier 3 challenge payouts and one grand prize, to the first person to complete the full set. Vanta had already claimed three of the seven Tier 3 payouts. If he finished before I could catch up to Tier 3, he took everything that was left, and the grand prize.
Forty-one participants. 7 tier-3 payouts and 1 grand prize to go.
I checked the other progress trackers. Out of forty-one registered participants, six had completed Tier 1 so far. I was the seventh. Everyone else was either behind me or so far behind they weren’t visible in the progress data yet. The only person ahead of me, meaningfully, operationally ahead, was Vanta.
I worked back through my own Tier 1 timeline. Four hours to navigate. One hour to breach. Add Tier 2, infiltration is slower, call it two, maybe three days conservatively. I had to complete Tier 2, advance to Tier 3, and overtake Vanta on his fourth Tier 3 challenge before he reached his seventh.
That wasn’t impossible. It also wasn’t comfortable.
I closed the forum tab. I opened a fresh terminal. I started pulling the thread on Vanta’s registered alias, the handle’s history across boards I have access to, the patterns of their posting, the work attributed to them, the same due diligence I do with any unknown in an environment that has consequences.
What I found was almost nothing. Vanta was three weeks old as a public identity. Created for this, it seemed. Posts on two forums, both times promoting the Dark Cypher competition to circles where it hadn’t yet penetrated. Seeding it, as Ki would say. The velocity of something that was grown in a lab.
I sat with that for a long time.
Outside, the sun had moved far enough west that the gold light through the windows had gone orange and begun to redden toward evening. The city’s noise register shifted as it does at this hour, the daytime traffic finding its evening texture, the distant suggestion of music from the bar two blocks over beginning its warmup, a couple arguing on the sidewalk below in the clipped way of people continuing a fight they’ve been having all day and are no longer trying to contain. A Pacific Compact transit bus moved along the street below, electric, nearly silent, its side panels bearing the Compact’s civic branding, a stylized coastline, a sun, Forward Together in the clean bureaucratic font that replaced the old municipal signage during the reconstruction. The bus stopped at the corner and opened its doors and took on three people and closed its doors and moved on and the street resumed its evening rhythm like nothing interrupted it.
I studied Vanta’s posting history for another ten minutes. Then I added Vanta to a text file I keep for things worth tracking, gave the entry a date, and closed the terminal.
Cade's loft · After the dig on Vanta turns up nothing · Evening
The tier two briefing had loaded on the Dark Cypher site. I pulled it up.
The second tier was different from the first in the way that competitions get harder, not just more of the same, but a different kind of problem. Where the first tier was navigation and retrieval, the second tier was infiltration. A target system, described in terms of what it is rather than where it is. An objective: exfiltrate a single file. No other guidance. The address of the target system was the first challenge, it wasn’t provided, it had to be derived from a set of indicators embedded in the tier two briefing document itself, and the derivation was not trivial.
I read the briefing twice. Then I opened a fresh notepad document and started writing down what I knew.
This was going to take longer than that day.
I leaned back in the chair and let my eyes rest on the ceiling, which was bare and slightly water-stained in one corner from a leak that was fixed before I moved in but that left its mark, a pale brown ring on the white paint that nobody ever repainted over. I looked at it the way I look at it sometimes when I’m thinking, not at anything in particular, just at a neutral surface, giving my visual cortex somewhere to park itself while the rest of my brain does the actual work.
The thing that was wrong with the page. The infrastructure built before the announcement. The carefully vague language about a deliverable of significant technical merit. The prize large enough to mean someone is serious. Vanta seeding the competition in the days before it went public.
What this competition was building toward was not self-evident from the briefing documents. What the intelligence gathered at each tier was ultimately for, what the deliverable actually was, was not stated. I was being asked to do work whose end purpose I didn’t know.
This happens. In the underground, opacity is standard practice. You don’t explain yourself any more than necessary. You don’t share purpose or context that isn’t operationally required. People who come to this world from a background in institutional security sometimes find this unsettling, the absence of the professional frameworks they’re accustomed to, the briefing documents and risk assessments and chain-of-approval structures. People who have always worked this way find the question slightly absurd. Every job has an end purpose. You rarely know all of it. The work is the work.
I was one of the second kind of person.
I pulled the tier two briefing back up and started on the derivation problem.
My watch read nine-forty-seven. The desk fan clicked through its rotation. The server hum sat in the floor. Somewhere one floor below me, in the apartment on the second floor, a woman who looked at a terminal window like she was actually trying to read it was probably not thinking about the man from the third floor who closed his laptop before she could see what was on it.
I was not thinking about this either.
I worked.