It was a Saturday in January. She'd made coffee, done the dishes from dinner the night before, sent two emails she'd been putting off. The laptop was on the kitchen table — she'd stopped putting it away sometime in the fall, and the habit had calcified into fact. She opened it. She checked her work email. She checked the news. She navigated to the repository, the URL autocompleting from the first two letters, the page resolving before she'd finished thinking about whether to go there.
The page loaded. The contribution graph sat at the top — that long horizontal bar of green squares representing each calendar day, light green for one or two contributions, dark green for more, empty gray for nothing. She'd looked at this graph a hundred times while she was building the project, watched it fill in as she worked. She had not looked at it in four months.
The graph ran left to right, chronologically. On the left side: solid green, dark and dense, the productive months when she was writing code every day, sometimes twice a day, the square-by-square accumulation of someone building something they were certain about. Then it thinned. She could see the exact month — month seven or eight, the squares lighter, some gaps appearing, the intervals growing. Then sparser. Then a long unbroken gray — four months of it, clean as a break in a signal.
Then, beginning in December, a scattering of small green dots. They were not her contributions. She'd given Cal collaborator access in month six when he'd started helping with the indexing work, and she saw his squares now — regular, modest, one or two at a time, appearing in the dead zone she'd left behind. He hadn't told her. She hadn't known to look.
She sat with the graph for a moment. She was looking at a mood chart she hadn't designed. The activity level plotted by day, the enthusiasm visible in the density, the exhaustion visible in the thinning, the collapse visible in the gray, and then — someone else's care, quiet and consistent, in the spaces she'd gone dark.
She opened the commit history and read it from the top — chronologically, from initial commit forward. This was how she reviewed code: following the timeline, reading the shape of decisions, finding the place where things went wrong.
Initial commit. Let's fix this. Month 1, January. She recognized Martin's voice in the phrasing. He hadn't written it — she had — but she'd been at the kitchen table at his house the day she started the project, and she'd typed the commit message in the register of someone who had just heard a problem stated clearly enough to believe it was solvable. Direct, practical, the inflection of a man who taught thirty-two years of physics to teenagers and believed in the utility of a well-defined problem. The early commits were clean: professional, descriptive messages, well-scoped changes, clear documentation of decisions and reasoning. She scrolled through the middle months and watched the timestamps drift.
The commit times had been clustered in the early evening through month five. Then later. Then later. Month seven: 11:47 PM, 12:23 AM, 11:58 PM. Month eight: 1:09 AM, 12:47 AM, 1:53 AM. Month nine: 2:14 AM. 2:31 AM. She could identify the exact commit where the register cracked. Not the 3:47 AM one — that was already past the crack — but earlier, somewhere in month eight: Refactor audio profile matching — confidence threshold logic updated. Standard. But below it: Fix edge case in contour scoring. Emotional contour is more durable than episodic content, apparently. An observation that didn't belong in a commit message. She had filed it under "fix" but it wasn't a fix. It was something she was thinking, and the commit message was where it went.
She was reading a clinical timeline. The patient was her.
She clicked through to the audio pattern matching file. The code comment was there — she'd known it was there since Cal had asked about it indirectly, the meeting in the glass conference room with the closed laptop. She'd understood then that he'd read something. She hadn't gone back to look. She read it now: five lines of green text in monospace, addressed to no one, written at some hour she couldn't retrieve. She knew the function — had written and rewritten it across a dozen commits. She did not know the comment. There was no moment she could locate where she had decided to write it. She had clearly been in the function at 2:14 AM in some receding month, following the call chain, and the comment had appeared in the editor and her hands had written it and she had moved past it. A function he used to watch her debug. A chair he doesn't sit in anymore. The function still works. That's the worst part.
She scrolled to the README. The Known Issues section was exactly as she'd left it — five checkboxes, all unchecked, the clinical formatting intact throughout.
``` ## Known Issues
- [ ] Audio prompt latency exceeds 200ms on low-bandwidth connections - [ ] Memory indexing fails silently when input images are corrupted - [ ] Trigger matching degrades when ambient noise exceeds 40dB - [ ] Dad called me by Mom's name again (not a bug, not fixable) - [ ] The system works. The system works and it doesn't matter. ```
She scrolled to the Installation section. The section was standard for the first several lines — pip install, requirements.txt, the Python version requirement. Then:
``` Requires Python 3.9+. Requires a father who remembers what Python is. Requires a father. ```
She did not remember writing that. She read it again: the two extra lines were there in the plain text of the documentation, between the version requirement and the next section break, formatted identically to the lines around them. They had been there for however many months since she'd written them, visible to anyone who read the README — the contributors who'd submitted patches, Dr. Chen's team, the student in Seoul. They were public. They had been public. She had not known they were there. She scrolled to the Roadmap.
``` ## Roadmap
### v2.0 (Planned) - [ ] Multi-modal memory anchoring (audio + visual + olfactory??) - [ ] Family network support (multiple caregivers, shared memory pools) - [ ] Longitudinal tracking of pattern stability - [ ] Figure out why the audio matching works better on Sundays - [ ] Figure out why Sundays are getting harder - [ ] Build something that actually helps
_Last updated: Month 3. Some of these features will ship. Some of these features were always impossible. I'm not sure which is which anymore._ ```
Month 3. She had written the Roadmap when the project still felt like a project, when the problems were bounded and she had believed the gap between what the system could do and what she needed it to do was closable with sufficient precision. She had been wrong. But she had been wrong in a way that only became visible from here, from month seventeen.
She didn't delete it. She could have opened the file, removed the section, updated the timestamp. But the Roadmap was a record of what she had believed when she had believed it, and she couldn't recapture the month-three version of herself. She let it stand.
She closed the laptop. The kitchen table was where it had always been: the same table she'd been eating at alone since Noor left, the same table where Diane's brochures had been spread out in month eight. Afternoon light came through the window at the angle that meant it was past three. Daylight in January — not better than the 3 AM blue light of the previous months, but honest in a different way, the light that comes through a window when you're meant to be awake.
She sat with her hands on the closed laptop and understood something about the past seventeen months. The code comments. The Known Issues entries. The Installation section. The commit messages where the professional register had slipped and something else had come through. The README had been absorbing material that had nowhere else to go. She had closed off the other channels — no blockers when Cal asked, family stuff, I'm managing when Priya asked, forty minutes in the car outside Evergreen without calling anyone. She had been routing everything through the only format her system would accept: documentation syntax. Checkboxes and commit messages and function comments and installation requirements. The only channel she'd left open. So grief had found it.
She had not known she was doing it. She had pushed those commits and written those comments at hours when she wasn't watching her own hands very carefully, and she had not known what was accumulating. She knew now. She was looking at the archaeological record of what she had been going through, written in the only language she'd been speaking. Understanding this did not fix anything. It did not update the Roadmap or resolve the Known Issue that had no checkbox syntax for completion. It was a true thing she had not known before, and now knew, and would go on knowing.
She sat at the kitchen table with the closed laptop and the afternoon light and held the knowledge the way you hold something that is simply the shape it is.