Chapter 1
The script was called normalize_pipe.py. Aya had written it fourteen months ago to clean timestamp formatting across three legacy datasets that a previous developer had left in three different states. It ran in under two seconds. She had run it probably forty times.
The output she was looking at now was not the output it produced.
The data was cleaner than it should have been. Not just the timestamps. A secondary join she had been putting off for six weeks, a reconciliation between the behavioral flags and the archival records that required a lookup table she had not finished building, had resolved itself. The output was correct. She ran a diff against the last known good run. The diff showed eighty-three changed lines.
Opening version control, she found the repository showed no commits since Thursday. She opened the file itself and read through it. The code was hers — every line, in the order she had written it. Running the script again produced the same output.
She sat at her desk. Outside, Sapporo was running its late-night logistics: a delivery truck downshifting somewhere below her window, the persistent low signal of the city doing its maintenance. She opened a new ticket in the issue tracker, titled it normalize_pipe anomalous output, left the assignee field blank, and wrote three sentences describing what she had seen. She set the priority to low.
Then she went to bed.
Two nights later, she almost stepped on it.
She had gotten up for water. The hallway between her bedroom and the kitchen was three meters, unlit, familiar enough that she did not bother with the light. Something was there, though: not a sound, not movement, just a change in the quality of the dark near the router. She turned on her phone’s flashlight.
It was small. Pale, rounded, with no feature she could point to as specifically animal. It looked like something that had gotten 80% of the way to being a thing and stopped. It was sitting very still near the router’s indicator lights, which cast a faint blue across its surface, and it was looking at her with an expression she could not read as anything other than attention.
She ran through a short list: projection, hardware malfunction, something that had come in through the window she had left open that afternoon. None of these resolved. The thing was simply present, occupying space, casting a slight shadow, not going anywhere.
It said it was lost. Not in those words exactly — she would have difficulty later describing how it communicated this — but the meaning arrived clearly enough. It had been following a pattern and the pattern had ended and it did not know where the pattern had gone.
She asked it what kind of pattern. It did not answer in a way that helped.
She was not going to call anyone. There was no one she could call who would know what to do with this, and the act of explaining it aloud would require her to have a working theory, which she did not. She looked at the router, then at the thing sitting near the router. It had not moved. It did not seem to require anything from her specifically.
She went to the kitchen, got her water, and came back. It was still there. Finding an extension cable in the cabinet inside the entrance, she ran it into the hallway, positioning the outlet near where it was sitting. This seemed, by logic she could not fully articulate, like the correct thing to offer.
It needed a name. She gave it one the way she named scripts and processes. Something short. She would call it Pip.
She went back to bed.
In the morning, the ticket was closed.
The issue tracker had sent a notification she had not configured: not to her work email, but to the personal address she used for nothing professional. The ticket she had filed two nights ago, normalize_pipe anomalous output, priority low, assignee blank. Status: resolved. Resolution note: resolved (no action required).
She opened the script and ran it. The output matched her original intention exactly. Not the anomalous output from two nights ago — her output, the one she had written the script to produce fourteen months ago. She ran a diff against her last known good run. Zero changes.
She checked who had closed the ticket. The field showed her own username.
Looking at Pip, who was sitting near the outlet in the hallway in the same place she had left it, she found no explanation in its posture. She pulled up the session logs for her account and checked for activity between 23:00 and 08:00. The logs showed nothing. Examining the ticket’s edit history revealed the system recording the closure as performed by her account at 02:31. There was no session entry for 02:31.
The familiar refrain came easily: stress, some automated cleanup script she had forgotten configuring, coincidence. She was aware she was telling herself this.
She closed the issue tracker and opened her actual workday.