Back to Genesis

Chapter 07

Bad Metadata

Zeth follows a low-risk metadata ticket until the timestamps reveal Apex was ready before the evidence arrived.

Download book PDF
Zeth Mnguni reflected in a laptop screen after finding bad metadata
The system knew before the email arrived.
Chapter live

Bad Metadata

Zeth Mnguni - Genesis

Download book PDF

Chapter 7: Bad Metadata

Wednesday found Zeth before the alarm.

He opened his eyes at 04:58 and lay still on the couch, listening to the apartment pretend it was not awake with him.

The fridge clicked.

A taxi hooted somewhere below, one short complaint and one longer one.

Rainwater moved in the gutters outside the window with the tired patience of a thing that had not finished with Johannesburg yet.

On the small table, his old laptop sat half open.

Not fully closed.

Not fully awake.

The screen had gone black during the night, but the machine's little power light still blinked at the hinge like it knew something and wanted credit.

Zeth sat up.

The blanket slid from his shoulders.

For a few seconds, he did not touch the laptop.

That felt like discipline.

Then he touched it.

The screen returned slowly, complaining with a pale flash before the desktop settled. The text file waited where he had left it.

questions.txt

Four lines.

`R_NKOSI.watch`

`civic-media-risk`

`monitor-only`

`migrated legacy hold`

Then the fifth line.

`How does media-risk map to access control?`

Zeth stared at the file until the words lost their edges.

He should delete it.

That would be sensible.

No file, no question. No question, no proof of question. No proof of question, no conversation where someone calm asked why an intern had started collecting restricted-looking phrases on a personal laptop two days after entering a secure company.

He moved the cursor to the top corner.

Hovered over the close button.

Did not click.

Because deletion was not innocence. Deletion was just another record waiting to be found by someone with a better tool and less mercy.

He closed the laptop properly.

The screen went dark.

That was enough honesty for morning.

His phone buzzed on the floor near his shoes.

KB.

Zeth picked it up before the second buzz because KB at dawn was either business, trouble, or Gogo waking up worried about him.

"Gogo?" Zeth said.

"Haibo," KB said. "Listen to this one. I call to greet and already I am an emergency siren."

"It is five."

"Rich people greet at what time?"

"Rich people sleep."

"That's why they stay rich. They are not awake making calls that cost money."

Zeth rubbed a hand over his face.

"Is Gogo okay?"

"She is fine. She woke up to ask why the newsreader always looks like he is lying with his teeth."

"She is probably right."

"Obviously. She also said if you are eating noodles again, she will pray for your stomach separately."

Zeth looked at the pot in the sink from last night.

"Tell her I ate vegetables."

"Which vegetable?"

"Onion."

KB was quiet.

Then he said, "My friend, even criminals deserve better lies."

Zeth almost smiled.

Almost.

KB heard the part that did not arrive.

"You sound finished."

"I am fine."

"That one is your company voice. Leave it at Apex."

Zeth stood and folded the blanket before answering. Not sharply. Not like the academy. Just enough to make the couch look less like a confession.

"What is happening?"

"Lindi called Sipho again."

Zeth stopped.

"Why?"

"Because apparently Malusi's phone is still off, Rendani is still missing, and journalists have a disease where waiting feels like dying."

"Did she ask for me?"

"Awu. You wanted her to?"

"KB."

"Ngiyabuza nje."

"Did she ask for me?"

"No. She asked if I had heard anything from Malusi's side. But she said your name by not saying your name."

"That is not a thing."

"It is very much a thing. Women are professionals at speaking around the person they mean."

Zeth walked to the window and looked down at the street. A delivery bike moved slowly past, the rider hunched against the wet morning.

"What did you tell her?"

"I told her I am still alive, which means I have not found anything useful yet."

"That is your system?"

"My system has kept me breathing longer than some people's degrees."

Zeth did not answer.

KB lowered his voice.

"Sharp, listen. I know you. You are already doing that thing where your mind runs ahead and then your body pretends it is still in the room."

"I am going to work."

"Exactly. Work. Not prison. Not war. Not whatever beautiful trouble with dimples has brought to your doorstep."

Zeth closed his eyes.

"You have not seen her dimples."

"So there are dimples?"

"I have to shower."

KB laughed properly then.

"Yeyi. Apex is in trouble."

"Goodbye, KB."

"Eat something that grew from the ground and not from a packet."

"Onion grows from the ground."

"Uzoquleka e-boardroom if ukhuluma isingisi on an empty stomach."

Zeth ended the call.

The apartment went quiet again.

On the small table, the laptop stayed closed.

Zeth got ready without opening it.

He showered.

He ironed the white patterned shirt again because it had begun to understand his body and he did not own enough shirts to punish it for that. He put on the dark trousers. No tie. No jacket. Clean shoes. No suit performance.

In the mirror, he looked less like the email and more like the building.

That should have felt like progress.

It felt like surrender with better lighting.

Before leaving, he picked up his phone and opened a new message.

Lindi's number sat in his recent calls with no name saved beside it.

He had not saved it.

That was not caution.

That was avoidance.

He typed:

What exact time did the complaint reach your inbox?

He stared at it.

Deleted your.

Typed it again.

Sent before he could make it worse.

The reply came while he was locking the apartment door.

Good morning to you too, Apex.

He should not have smiled in the passage.

He did anyway.

Then another message arrived.

22:43. Thread list still had the paperclip at 22:44. Why?

Zeth typed:

Do not send screenshots to me.

Her reply came immediately.

You ask like a source and panic like legal. Pick a personality.

He looked at the message long enough that the hallway light switched off around him.

He typed:

Keep it offline.

Then, after a pause:

Please.

For once, she did not answer with a joke.

Okay.

The single word stayed with him all the way down to the basement.

Outside, Wednesday had no interest in being kind.

The rain had thinned into a grey mist that made windscreen wipers feel dramatic. Zeth drove through Maboneng with both hands on the wheel, the Polo humming like it still suspected every road was a test. By the time he reached the Apex basement, his shirt cuffs were damp, his stomach was empty, and the word 22:43 had become a small stone under his tongue.

He parked in Bay V-12.

The tie was still on the passenger seat.

He looked at it.

"Do not start," he said.

The tie said nothing with dignity.

In the lobby, the turnstiles opened for him without argument.

Card.

Green.

Finger.

Green.

The guard nodded before the screen finished updating.

"Morning, Mr Mnguni."

"Morning, bhuti. Unjani namhlanje?"

The guard blinked once. Most people gave him a nod and kept walking.

"Ngiyaphila," he said. "Kodwa bathi ukuzala ukuzelula. Hayi mina sengihlulekile. Umfana wami sevele wayeka isikole."

"Wayeka?"

"Uthi isikole is not for him this week."

Zeth smiled before he could stop himself.

"E-academy besikubiza nge-leadership lokho."

The guard laughed properly.

Near reception, the cleaner from his first day rolled past with a bucket clipped to the trolley. Her name badge said JOYCE, though everything about the way she carried herself asked to be called Ma.

"Mshiye, mfana," she said. "Ukube izingane bezinama-policy document, sonke besizoresigna."

Zeth turned to her properly.

"Sawubona, Ma Joyce."

"Yebo, mtanami." She looked at his shirt, then at the missing tie. "Namhlanje awugqokile isuit yomngcwabo?"

"Namhlanje ayikho i-tie."

"Kuhle. Manje usubukeka sengathi uyasebenza la, hhayi ukuthi ulande izikweletu."

"Progress," Zeth said.

She rolled away smiling.

For a moment, Apex felt less polished.

Zeth knew more people like the guard and Ma Joyce than he knew businessmen, accountants, and engineers. Guards, cleaners, drivers, kitchen staff, maintenance men. People who knew which doors stuck, which managers shouted, which lift made a sound before it failed, and which visitors looked lost before reception noticed. He knew how to greet them because they were not furniture, and because his life had never allowed him to pretend they were.

Zeth stepped through, then stopped himself from looking back at the display.

Systems displayed names.

That was their job.

Knowing when to display them was the part he no longer trusted.

Ruan waited near the lifts holding two coffees and looking like money had lost a small fight with sleep.

"You collect allies quickly," he said.

"I greeted people."

"Where I come from, that is called advanced networking."

"Wednesday has come to collect," he said.

"From who?"

"All of us. But personally, I owe it nothing."

He held out one coffee.

Zeth looked at it.

"Why?"

"Because you look like you argued with a spreadsheet in a dream."

"I do not drink coffee."

"You are in software engineering."

"So?"

"Software engineers turn coffee into code. That is industry doctrine."

"Then I will disappoint the doctrine."

"Then hold it. Warmth creates the illusion of being cared for."

Zeth took it.

"You are strange."

"Thank you. My mother says it with less admiration."

The lift opened.

They entered with two accountants, a woman from HR, and a man in a hoodie that said I CAN EXPLAIN IT BUT NOT FOR FREE.

Ruan nodded toward the hoodie.

"There. Engineering formalwear."

Zeth watched the floor numbers rise.

"It has sleeves."

"Black tie."

The HR woman glanced at them, decided she had heard worse, and returned to her phone.

On the fifth floor, the air felt different.

Not visibly.

That was the problem with pressure. It did not always enter the room wearing its own name.

Sizwe stood near the secure development door with his old mug in one hand. Mira was at her desk, already typing. Neither of them looked surprised to see Zeth.

That unsettled him.

Ruan tapped his card at the secure development door.

Green.

"Still loved," he said.

Zeth tapped his.

Green.

Fast.

Inside, his workstation had no active tickets.

The queue was empty.

The guidelines document was open exactly where Mira had left it the previous day.

Page one.

Purpose Of Access Control

Zeth sat down.

He did not touch the mouse.

Ruan leaned over the desk island.

"Did they put you in the naughty corner digitally?"

"I have no ticket."

"Luxury. I have three. One of them is apostrophe-related. At this point I am considering writing to Ireland."

Zeth looked at his blank queue.

The lack of work felt less like punishment than waiting.

At 08:11, Mira appeared beside his desk with a printed sheet and a face that had never believed in easing people into things.

"Mnguni."

Zeth turned.

"Yes."

She placed the sheet in front of him.

"Metadata normalization ticket. Training scope. You will read the ticket twice before opening anything."

Ruan looked over.

"He gets metadata? I get punctuation trauma?"

Mira did not look at him.

"You get what the system believes you can survive."

Ruan placed a hand on his chest.

"That was unnecessarily accurate."

Zeth read the sheet.

SD-18504

Training Sandbox: Media Intake Metadata Sorts Out Of Sequence

Priority: Low.

Assigned to: Mnguni, Zeth.

Environment: Dev / Training.

Description:

When sorting media intake sample records by event time, some items appear out of sequence. Expected behaviour: normalize all timestamps to SAST and sort by event occurrence.

Do not modify source records.

Do not access production mail systems.

Do not alter role filters.

Do not export sample data.

Zeth read it once.

Then again.

The ticket was simple.

Too simple.

Mira stayed beside him until he looked up.

"What is the first instruction?"

"Do not modify source records."

"Second?"

"Do not access production mail systems."

"Third?"

"Do not alter role filters."

"Fourth?"

"Do not export sample data."

"Good."

"Why me?"

"Because you finished yesterday's ticket quickly."

That was not the whole answer.

It was barely dressed enough to enter public.

Zeth nodded anyway.

"I will fix the sort."

"You will reproduce the issue first."

"Yes."

"You will only fix the sort."

"Yes."

"If you see anything outside the ticket, you call me or Sizwe."

Zeth did not answer quickly this time.

Mira noticed.

"Say it."

"If I see anything outside the ticket, I call you or Sizwe."

"Good."

She walked away.

Ruan rolled closer by one chair-length.

"The way she gives instructions makes me want to confess to things I have not done yet."

"Fix your apostrophes."

"I am. Some of them have families."

Zeth opened the dev portal.

Slow login.

Security banner.

Second prompt.

Training dashboard.

He opened SD-18504 and did exactly what the sheet said.

Reproduce first.

The sample application displayed a list of media intake records. Most were ordinary training nonsense.

Committee minutes.

Building access memos.

Tender attachments.

Scanned ID references.

Complaint emails.

Each row had fields.

`record_id`

`source_ref`

`event_type`

`event_time`

`stored_time`

`timezone`

`normalized_time`

`policy_tag`

The bug appeared immediately when he sorted by event time. Items from the same evening jumped around the list. Some fields were stored with offsets. Some were stored as UTC. Some were plain strings pretending the world had only one clock.

Zeth exhaled.

This was not mystery.

This was laziness with consequences.

He opened the parser.

The code was old enough to have opinions.

Half the timestamps were treated as local time even when they included a timezone offset. The parser converted some values twice and did not convert others at all. A person in Cape Town, Johannesburg, London, and an application server in a cold room could all disagree about the same minute and still pass the test suite because no one had written the test suite to care.

He wrote one failing test.

Then another.

Then stopped before he made the ticket bigger than it was.

Fix only the issue.

He could hear Mira's voice without enjoying the privilege.

Ruan muttered from the other side.

"I have discovered a new kind of evil."

"What?"

"The crash only happens when the exported file is opened in Excel."

"That is not new evil."

"It feels fresh to me."

Zeth ran the failing test.

Fail.

Good.

He fixed the parser.

Run.

Pass.

He reproduced the sort.

Better.

Almost.

One record still sat out of order.

Zeth frowned.

He reran the sort.

Same row.

He checked the field values.

`record_id: TRN-MI-044`

`source_ref: R_NKOSI.watch`

The room did not change.

No music.

No red light.

No dramatic warning.

Ruan clicked his mouse. Someone near the window laughed about a server restart. Mira answered a phone with "Naidoo" and no patience. Sizwe walked past with a file under his arm.

Only Zeth stopped.

He took his hands off the keyboard.

That was what saved him from doing the first stupid thing.

He read the row without touching anything.

`source_ref: R_NKOSI.watch`

`event_type: attachment_hold`

`event_time: 2011-01-04T20:41:09Z`

`stored_time: 2011-01-04T22:41:09+02:00`

`timezone: UTC`

`policy_tag: civic-media-risk`

Two rows above it:

`source_ref: R_NKOSI.watch`

`event_type: mailbox_received`

`event_time: 2011-01-04T22:43:17+02:00`

`stored_time: 2011-01-04T22:43:17+02:00`

`timezone: SAST`

`policy_tag: civic-media-risk`

Zeth looked at the times until they became arithmetic.

20:41 UTC was 22:41 in Johannesburg.

The attachment hold had happened at 22:41.

The mailbox received event had happened at 22:43.

The system had held an attachment two minutes before the mailbox received it.

Maybe the source record was bad.

Maybe the sample data was fake.

Maybe someone had imported training rows from a production issue and forgotten to clean the names.

Maybe.

Maybe was the place cowards sent facts to wait.

Zeth leaned back.

Ruan noticed immediately.

"You have the face."

"No."

"That was not a question."

Zeth kept his eyes on the screen.

"What does Excel do to dates?"

Ruan turned fully.

"Emotionally or legally?"

"Technically."

"Bad things. Why?"

"If one event says 22:41 and another says 22:43, but the first event depends on the second, what do you check first?"

Ruan's smile faded into actual thought.

"Timezone."

"Checked."

"Import order."

"The event field is independent from stored time."

"Clock drift."

"Two minutes?"

"You've met computers."

Zeth looked at him.

Ruan lifted both hands.

"Fine. Depends what the events are."

Zeth did not answer.

Ruan looked from Zeth to the monitor.

He did not lean closer.

That was the first useful thing.

"Is this one of those things where I become safer by knowing less?"

"Yes."

"I hate growth."

Zeth almost smiled.

The smile did not arrive.

He raised his hand.

Not high.

Enough.

Sizwe saw it before Mira did.

That was interesting.

He came over with his mug.

"Ticket?"

"Metadata sort."

"And?"

Zeth turned the monitor slightly. Not enough for the whole floor. Enough for Sizwe.

"One row still sorts wrong after normalization."

Sizwe read the row.

His face did not change.

The mug stopped halfway to the desk.

That was the only sign.

"Explain," Sizwe said.

Zeth kept his voice level.

"The parser was converting timezone offsets inconsistently. I fixed that. Most rows now sort correctly. But this source reference has an attachment hold at 22:41 SAST and a mailbox received event at 22:43 SAST."

"Maybe the receive event was delayed."

"Then it would be stored later, not received later."

"Maybe the server clock was wrong."

"Then more rows from the same source should show drift."

"Maybe sample data is dirty."

"It is."

Sizwe looked at him then.

Zeth held his eyes.

"But dirty how matters."

For a second, there was something like sadness in Sizwe's face.

It came and left too quickly for anyone else to accuse it.

Mira arrived beside them.

"Problem?"

Sizwe did not look away from the screen.

"Timestamp normalization issue."

"I assigned him timestamp normalization."

"He found one."

Mira leaned in.

Read.

Zeth watched the moment she reached `R_NKOSI.watch`.

Nothing changed.

Which meant everything did.

She straightened.

"Bad sample row."

"Should I exclude it from the test set?" Zeth asked.

"Yes."

Sizwe said, "No."

Mira looked at him.

The air between them tightened.

Ruan rolled his chair backward without making a sound.

Smart.

Sizwe took the mouse, clicked the row, and opened the metadata detail.

He did not open a folder.

He did not access anything restricted.

He stayed inside the ticket's sample view.

That mattered.

The detail panel showed a longer list.

`monitor_created: 2011-01-04T20:38:55Z`

`mailbox_received: 2011-01-04T22:43:17+02:00`

`attachment_hold: 2011-01-04T20:41:09Z`

`attachment_missing_state: migrated_legacy_hold`

`policy_tag: civic-media-risk`

`action_mode: monitor-only`

`source_ref: R_NKOSI.watch`

Zeth stopped breathing for long enough to notice himself stop.

20:38 UTC.

22:38 SAST.

The monitor was created five minutes before the email arrived.

Three minutes before the attachment hold.

Mira took the mouse from Sizwe.

Not roughly.

Precisely.

She closed the detail panel.

"This row is not required to fix the parser."

Sizwe said, "It is required to understand why the parser failed."

"Training sample quality is my concern."

"Intern training quality is mine."

Mira looked at him fully.

"Not this kind."

The room had not gone quiet, but Zeth had.

He knew enough to keep still.

Sizwe put his mug down beside the keyboard.

"Mnguni," he said, "what is the ticket asking you to fix?"

"Sort order after timestamp normalization."

"Can you fix that without changing source records?"

"Yes."

"Can you write a test that shows events are sorted by normalized occurrence time even when a sample row has inconsistent event dependencies?"

Mira said, "Sizwe."

He continued as if she had not.

"Answer."

Zeth looked at the closed detail panel.

Then at the rows.

"Yes."

"Then do that."

Mira's jaw shifted.

"And mark TRN-MI-044 for review," Sizwe added.

Mira said, "I will mark it."

"Good."

Sizwe picked up his mug.

"Then it is handled."

The word returned from yesterday with different clothes.

Handled.

Zeth wondered how many things at Apex had been handled until only the clean version remained.

Mira looked at him.

"You will not copy that row."

"I know."

"You will not write down that source reference."

"I already know it."

"That was not my instruction."

Zeth felt Ruan watching the side of his face.

He took a breath through his nose.

"I will not write it down."

"You will complete the ticket."

"Yes."

"Then you will take lunch away from this floor."

That was not a suggestion.

Mira walked away.

Sizwe did not.

He looked at the screen, then at Zeth's hands.

"Slowly," he said.

Zeth nodded.

Sizwe left.

Ruan waited twelve full seconds.

Then whispered, "I have decided I do not like Wednesday."

Zeth stared at the sample rows.

"You said it came to collect."

"Yes. From you. Not from my chair."

"Then fix your apostrophe."

"My apostrophe is no longer the most dramatic punctuation on this floor."

Zeth did not laugh.

Ruan did not push.

That was new.

Zeth wrote the test.

Carefully.

No source reference.

No policy tag.

No copied row.

He created a synthetic sample:

`record_A`

`record_B`

`record_C`

Different timezones.

Different stored formats.

Expected order.

Fail.

Fix.

Pass.

He added a note:

Parser now normalizes event_time values to SAST before sorting. Source records are unchanged. One training sample row appears to have inconsistent event dependency metadata and has been marked for review by security.

He read the note twice.

Too much?

Too little?

He removed by security.

Now it said:

Parser now normalizes event_time values to SAST before sorting. Source records are unchanged. One training sample row appears to have inconsistent event dependency metadata and has been marked for review.

Good.

Plain.

Defensible.

Cowardly enough to live.

He submitted the branch.

Green check.

For now.

At 12:06, Sizwe appeared beside his desk.

"Lunch."

Zeth looked up.

"Mira said away from the floor."

"I heard her."

"Then I should go."

"You are."

Ruan looked between them.

"Am I invited to the ominous lunch?"

"No," Sizwe said.

Ruan nodded.

"Honestly, relieved."

Sizwe turned.

Zeth followed.

They did not go to the cafeteria.

They took the side stairs down two levels, crossed a service corridor that smelled like floor polish and warm cables, and stopped near a vending machine that sold chips, chocolate, and something labelled Health Bar with suspicious confidence.

Sizwe bought two packets of chips.

He handed one to Zeth.

Zeth looked at it.

"This is lunch?"

"This is plausible denial."

"For what?"

"For standing here."

Zeth opened the packet.

Salt and vinegar.

Aggressive.

He ate one chip because his stomach had no moral standards left.

Sizwe leaned against the wall beside the vending machine.

For a while, they ate in silence.

Someone pushed a trolley past the far end of the corridor. The wheels complained all the way through the turn.

Sizwe said, "What is wrong with the time?"

Zeth did not pretend not to know.

"The monitor was created before the mailbox received the complaint."

"How long before?"

"Five minutes."

"What does that mean?"

"It could mean bad metadata."

"That is a label. Not the answer."

Zeth looked at him.

Sizwe ate another chip.

"Answer properly."

Zeth lowered his voice.

"It means the system might not have reacted to the email. It might have been waiting for the source reference before the email arrived."

"Might."

"Yes."

"Good word. Keeps people out of court."

"But not out of danger."

Sizwe looked down the corridor.

"No."

The vending machine hummed between them.

Zeth waited.

He had learned something from Lindi without meaning to.

If a person did not want to answer, sometimes silence made a better question than speaking.

Sizwe noticed.

His mouth moved like he almost respected it.

"Your father hated metadata."

Zeth's chest tightened.

There it was again.

Menzi entering a room without asking.

"Why?"

"Because people treated it like decoration. Date created. Date modified. User. Location. Device. Little labels on the side of the real thing."

"It is not decoration."

"He knew that."

Sizwe folded the top of the chip packet once.

"He said bad metadata could put a real person in a cell while the clean document smiled in court."

Zeth looked at him.

The corridor seemed to narrow.

"When did he say that?"

"Before you were old enough for the answer to help you."

"That is not an answer."

"No."

"Do you enjoy doing that?"

"Keeping you alive? Sometimes."

"Talking around my father."

Sizwe did not answer.

That was answer enough to make Zeth angry.

"Everyone talks around him," Zeth said. "Academy people. Foundation people. Old friends who suddenly remember appointments. Now you. You say his name, then lock the door before I can enter."

"Seeing a door is not permission."

"This is not a system."

Sizwe's eyes sharpened.

"Everything is a system when enough people are afraid."

Zeth looked away first.

Not because he agreed.

Because he did.

Sizwe's voice softened, but only by a fraction.

"You are good with patterns."

"So was he?"

"Yes."

"And that got him killed?"

The sentence left before Zeth had decided to say it.

It stood between them, too large for the service corridor.

Sizwe did not flinch.

That was what made Zeth colder.

"I did not say that."

"You did not have to."

"Careful."

"People keep saying that."

"Because you keep needing it."

Zeth crushed the chip packet in his hand.

The sound was small and stupid.

He forced his fingers open.

"What do I do with the timestamp?"

"Nothing."

"Sizwe."

"You complete your ticket. You do not save the row. You do not tell your journalist. You do not make a private copy. You do not become interesting to the wrong person before you understand what interesting costs."

"It is already connected to her story."

"Yes."

"Then doing nothing is a choice."

"Correct."

"And it helps them."

Sizwe looked at him for a long moment.

Then he said, "Bad metadata is not always bad because it is false. Sometimes it is bad because it is honest before the lie has finished dressing."

Zeth held still.

That one went in clean.

Not poetic.

Not comforting.

Useful.

"The row is honest?" he asked.

"I did not say that."

"You are exhausting."

"That is also intentional."

For the first time all day, Zeth almost laughed.

Sizwe saw it and looked relieved in a way he hid badly.

Then his face closed again.

"Listen to me. If you chase this from inside Apex, Apex will see you chasing it."

"Then where do I chase it from?"

"I said if."

"You meant when."

"No. I meant if. You still have a choice."

Zeth thought of the laptop in Maboneng. The black screen. The blinking cursor. Lindi's single Okay sitting in his phone like trust he had not earned.

"No," he said.

Sizwe sighed.

"That is what worried me."

"Then tell me what is safe."

"Nothing useful is safe."

"Then tell me what is less stupid."

That seemed to please Sizwe.

Not enough to smile.

Enough.

"Memory," he said.

Zeth frowned.

"What?"

"For now, your head is safer than a file. No notes. No screenshots. No clever names like questions dot txt."

Zeth's body betrayed him.

Small.

But Sizwe saw it.

His eyes changed.

"You already made a file."

Zeth said nothing.

Sizwe closed his eyes for one second.

"Of course you did."

"It is on my personal laptop."

"That is not a church. It can still be entered."

"There is no network access."

"You drive a Polo with a lock. Does that mean no one can steal it?"

Zeth hated how quickly KB's face appeared in his mind.

Sizwe pushed off from the wall.

"Delete nothing at work. Change nothing because you are scared. At home, decide whether a text file is worth becoming evidence against you before you even know the case."

"So I should delete it?"

"I said decide."

"You should try answering questions professionally one day."

"I work in secure development. We avoid dangerous experiments."

Zeth finished the last chip.

It tasted like salt and irritation.

Sizwe took the empty packet from him and dropped both packets into the bin.

"One more thing."

Zeth waited.

"When Mira says a thing is handled, ask yourself by whom."

Then Sizwe walked back toward the stairs.

Zeth stood beside the humming vending machine for a few seconds after him.

By whom.

Not why.

Not how.

By whom.

That was the kind of question that made doors appear where walls had been minding their business.

When Zeth returned to the fifth floor, Ruan was eating a sandwich at his desk and staring at his screen with visible betrayal.

"How was ominous lunch?" he asked.

"Salty."

"Mine has cucumber. We all suffer differently."

Zeth sat down.

His submitted ticket still had a green check.

For the first time that day, he wanted it to stay boring.

It did not.

At 13:22, the ticket refreshed.

Not the whole portal.

Just the sample table.

The row was gone.

Zeth did not move.

He ran the sort again.

Rows shifted.

The parser worked.

The test data now looked clean.

No `R_NKOSI.watch`.

No `civic-media-risk`.

No `migrated_legacy_hold`.

TRN-MI-044 had been replaced by:

`TRN-MI-044_REDACTED`

`source_ref: SAMPLE_MEDIA_044`

`event_type: attachment_review`

`event_time: 2011-01-04T22:46:00+02:00`

Clean.

Neat.

Useful.

False in the way polished shoes could be false after walking through mud.

Zeth opened the ticket activity log.

That was within the ticket.

Assigned work.

Defensible.

He did not search.

He did not export.

He read.

`13:07 sample row TRN-MI-044 marked for review`

`13:18 sample row TRN-MI-044 replaced`

`13:19 metadata dependency warning resolved`

`Updated by: SVC_CIVIC_MAINT`

Sizwe's question sat down beside him.

By whom.

Zeth looked across the floor.

Mira was in a meeting room with two analysts and a man from legal. He could see her through glass, arms folded, not touching a keyboard.

Sizwe was at his desk on the phone.

Ruan was fighting Excel.

No one was looking at Zeth.

That did not mean no one was watching.

His phone buzzed in his pocket.

He did not take it out immediately.

Phones were not allowed on the desk.

He waited until his hands stopped wanting to move too quickly, then stood.

"Bathroom," he said.

Ruan looked up.

"Thank you for the operational update."

"If anyone asks."

Ruan's expression changed.

Not joke first.

Friend first.

"I will say you were emotionally defeated by hydration."

"Fine."

In the bathroom, Zeth locked himself in the last stall and took out his phone.

Lindi.

Malusi's number pinged near City Deep late last night. Sipho heard Civil Records has a warehouse contact there. Do not ask how.

Then:

Can metadata lie about where someone was?

Zeth leaned back against the stall door.

For a moment, the building seemed to breathe around him.

He typed:

Yes.

Stopped.

Deleted it.

Typed:

Metadata can be wrong.

Deleted that too.

Typed:

Why?

Sent.

Her answer took thirty seconds.

Because if the phone is right, Malusi was near the warehouse after his email vanished. If the phone is wrong, someone wants me looking there.

Zeth closed his eyes.

Evidence.

Or coffin.

He typed:

Do not go there.

Her reply came fast enough to make his jaw tighten.

I asked a technical question, not for permission.

He stared at the words.

Then typed:

Then technically, do not go there.

This time, three dots appeared.

Disappeared.

Appeared again.

You found something.

He did not answer.

Zeth.

His name looked different on her screen.

He hated that.

He liked it more.

He typed:

If a system records an action before the event that caused it, what would you call that?

The reply took longer.

A lie.

Then:

Or a warning.

He looked at the bathroom tiles.

Apex used expensive glass upstairs and cheap grout where people were supposed to be alone. The grout had dark lines at the corners. No system cared about being clean everywhere.

He typed:

Not proof.

She answered:

Nothing is proof until someone is brave enough to keep it.

Zeth almost replied.

He did not.

Because he heard the bathroom door open.

Two men entered, talking about rugby and parking bays. They washed their hands, laughed at something, left.

Zeth waited ten seconds after the door closed.

Then he put the phone away.

When he returned to his desk, the activity log was still open.

`Updated by: SVC_CIVIC_MAINT`

He closed it.

Not because he wanted to.

Because he was starting to understand the difference between seeing and surviving.

The afternoon stretched.

Ruan fixed the apostrophe crash and left the insult to names for a future revolution.

Zeth completed the metadata ticket.

Mira approved it without comment.

That was worse than if she had warned him.

At 17:03, the floor began loosening into the strange theatre of office departure. Bags zipped. Monitors went dark. People promised to send emails they would not send until morning. Someone near the printer said, "No, leave it, tomorrow's me must also earn a salary."

Ruan stood and stretched.

"Are you leaving at a human time?"

"Yes."

"Convincing."

"You?"

"My mother has requested proof of continued survival. I am considering sending a photo of me next to a corporate plant."

"She will think you are thriving."

"Exactly. Fraud begins at home."

Zeth logged off.

The system accepted the command.

Clean.

He did not trust clean anymore.

In the basement, the Polo started on the second try, which felt personal after the day he had had.

Traffic toward Maboneng was wet, slow, and committed to emotional harm. A taxi cut across two lanes in front of him with the confidence of a man who had never feared paperwork. A woman selling fruit under a plastic sheet shouted prices at cars that could not stop. The city smelled like rain, petrol, and fried dough from somewhere hidden.

Zeth drove with Lindi's question in his head.

Can metadata lie about where someone was?

Yes.

No.

Wrong question.

People lied.

Metadata helped.

At the apartment, he did not make noodles.

He made bread and peanut butter because variety mattered even when dignity had left the room.

He ate standing at the counter.

Then he looked at the old laptop.

Closed.

Waiting.

He washed the knife.

Wiped the counter.

Moved one box from the middle of the room to the wall.

Moved it back because the wall made it look more permanent.

Finally, he sat.

Opened the laptop.

The machine woke slowly.

questions.txt waited.

For a full minute, Zeth did nothing.

Then he opened the file.

The five lines looked younger than they had that morning.

Naive.

Proud of themselves.

He placed the cursor at the end.

Sizwe's voice returned.

For now, your head is safer than a file.

Zeth selected everything.

His finger hovered over delete.

He thought of Lindi writing in notebooks because paper could drown in coffee.

He thought of Mira replacing the row.

He thought of Sizwe asking by whom.

He thought of Menzi Mnguni hating metadata because bad timestamps could put real people in cells.

Then he deleted the file contents.

Not the file.

The contents.

Empty white page.

The cursor blinked at the top, pretending innocence.

Zeth saved it.

An empty file called questions was still a question.

But it was less eager to testify.

He opened a browser.

No Apex.

No internal anything.

He searched public pages for City Deep Civil Records warehouse.

Nothing useful.

He searched tender notices.

He searched company registrations.

He searched `Civil Records Support City Deep`.

Nothing.

Then he searched the phrase without quotes:

`SVC CIVIC MAINT`

No results.

Of course.

He sat back.

The apartment hummed.

Fridge.

Lift.

Distant music.

The same chorus as last night.

His phone buzzed.

Lindi.

I am not going to City Deep tonight.

Then:

That is not me promising anything about tomorrow.

Zeth looked at the message.

He typed:

Tomorrow is not safer.

She answered:

Neither is ignorance.

He almost threw the phone onto the couch.

Instead he placed it face down on the table.

Calmly.

Like a person in control of himself.

Then he opened the empty text file again.

He did not type the source reference.

He did not type the policy tag.

He did not type the service account.

He typed one sentence.

`The system knew before the email arrived.`

He read it.

Deleted it.

Closed the file.

This time, he shut the laptop completely.

In the dark screen, he saw his own face looking back.

Tired.

Young.

Not careful enough.

The timestamps did not prove who had deleted the attachment.

They proved something worse.

Someone had been ready for the evidence before it arrived.