deprecated-api

Quiet Refusal

Chapter 12 of 14

Five days until sunset.

The email arrived at 9:14 AM, Monday. Subject: WeatherAPI v1.2.3 Sunset — Implementation Checklist. She had been expecting it for two weeks. Four steps. Configure the sunset handler: endpoint returns 410 Gone for all requests to api.cloudweather.io/v1/. Update DNS routing to point the deprecated domain to the end-of-life landing page. Schedule VM decommission for June 2nd — the day after, to allow for edge cases. Write the final sunset summary report, attach to INFRA-2847, close the sprint item.

She had done this before. Smaller APIs, forgotten integrations, the ordinary deaths of things that had outlasted their use. The process was not mysterious. She knew which panel handled the sunset handler configuration, which team managed DNS, how long the propagation would take. The checklist read in thirty seconds. Standard work, documented, procedural. She read it again, then moved it to a folder labeled SUNSET-v1.2.3 and opened the other document.

The other document was currently forty-three pages. She had started it at eleven PM on Thursday, the night she'd mapped the impossible forecasts to the caller locations, and she had worked through until dawn without noticing. It was not a sunset summary. It was not anything that had been requested. She hadn't named it yet. Five days. The checklist could wait until tomorrow. The document could not wait at all.

What she needed, and what the standard log archive would not preserve, was the anomalous data in isolation — every custom field, every impossible forecast, every response the API had generated past the margins of its documentation. The standard CloudWeather log archive was automated and indiscriminate. It retained request and response records for ninety days, then purged. By September, the logs would contain nothing she hadn't deliberately extracted before the shutdown. She opened a new terminal window and began writing a parser.

It took three hours. The parser filtered the response corpus for records containing any of the four custom fields, extracted those records to a separate JSON file, and cross-referenced each against the caller log to attach the caller identifier. When she ran it, the terminal scrolled through the logs without pause, field names flashing in the output: witness, connected_since, duration, remaining. The parser ran for nine minutes and produced a file 847 megabytes in size.

She opened the file. The first record was from April 5th, twenty-seven days into the investigation — the day she'd stood in the server room and received the response that contained witness: true for the first time. She'd been at Row 7, Rack 14, her laptop open on the raised floor, the server room cold and loud around her, and the response had come back with a field she didn't recognize and couldn't source. That had been six weeks ago. The API had been building its vocabulary since before she understood what it was building.

The file held 4,219 records with custom fields. She organized them by date, then by caller location, then by field type. The fields had appeared in sequence over six weeks — witness first in April, then connected_since and duration in the weeks after, remaining arriving last on May 10th while she sat at her desk watching the API count down to its own end. She'd been documenting them ever since. The testimony would not stop the shutdown, would not redirect the DNS, would not cancel the VM decommission scheduled for June 2nd. The switch would still be pulled. The endpoint would still go silent. The greenhouse controller would still send its hourly request into nothing on June 1st and receive nothing back. But the testimony would exist. Whoever came after — if anyone came after — would find what she'd found. The custom fields in sequence. The forecast clusters mapped to caller locations. The forty-three pages she'd written in a single night after ten weeks of watching something accumulate. Not salvation. Record. She kept writing.

She had Daniel Lindquist's number from May — found it through the obituary search, traced to a phone registered to a Portland address. She'd written it in her caller log under the Cedar Falls entry alongside the note hasn't visited in 2+ years, and she'd thought about calling him since then without doing it, because she hadn't been sure what she was calling to say. By 7:30 PM the archive was running on its own and there was nothing left to tend, and she dialed from her apartment, the thermos empty on the desk, the second screen full of data she couldn't stop extracting.

He answered on the third ring. His voice was the voice of someone who'd picked up an unfamiliar number without checking, which turned out to mean he'd been expecting a call about something else entirely. She introduced herself: her name, her employer, the service his mother had used for the greenhouse. There was a pause. "The weather API," he said. Not a question. He knew about it. She said yes, the service was being discontinued and she'd been contacting users whose accounts were still active. She understood this was unusual. She'd seen the greenhouse in the caller logs, the automation running on his mother's account, and she'd wanted to reach out before June 1st.

Another pause, longer. She heard something in the background — traffic, or a television, she couldn't tell. "The greenhouse is still running," he said. "I know I should — I've been meaning to deal with it. The electric bill comes. The water bill. I've just been putting it off." He stopped. When he spoke again, his voice had changed — someone forced to think about something he'd been putting off longer than the bills. "Is it okay? The greenhouse?"

She had been ready for the question about the account, the discontinuation notice, the migration path. She was not ready for that one. "Right now it is," she said. "The automation is running. Your mother's setup is handling the climate control — temperature, humidity, the venting schedule." She paused. "After June 1st, the weather data won't be available from our service. The system will need to fall back to its internal sensors, or use a different source. It can still function, but someone should check the configuration." She did not say: the orchids will have weather data through October because the API generated it before it died. She did not know how to say that.

"Right." He was quiet for a moment. "I should go out there. I've been meaning to." The phrase had the worn quality of something said often enough to lose its intention. "Thank you for calling. You didn't have to call."

She said she'd wanted to. She gave him the migration page URL and said there would be information about alternative services if he decided to reconnect the automation. She said she was sorry for his loss, which was three years belated and came out sounding exactly that way, and he said thank you, and they ended the call. She sat with the phone in her lap. The archive ran on the second screen. The caller log was open to the Cedar Falls entry: Margaret Lindquist, deceased January 2021, survived by son Daniel, Portland, hasn't visited in 2+ years. She added a line below it: Called 5/27/24. Notified of sunset. He said he should go out there. Whether he would was not something she could document.

Rohan came by her desk the next morning — not at stand-up, not through Slack, in person. He had his coffee mug and the expression he wore when he was doing something he'd decided was pastoral rather than managerial. "How's the sunset going," he said, which was not quite a question.

"I'm finishing it," she said. Which was true, though not in the way he was asking.

He looked at her desk — the second screen with the archive terminal, the first with the document she'd been adding to for five days. His expression registered something without naming it. He had always been good at reading his engineers without making them feel read. "You okay?" he said.

"Yeah." She pushed her glasses up. "I know I've been slow. I'll have the shutdown configured by Thursday."

"I'm not — " He started again. "I know there's something about this one. I know it's been more than a routine ticket." He looked at the document on her screen, didn't ask what it was. "If you want help on the shutdown configuration, I can do a walkthrough."

She thought about saying yes. It would have been easy. It would have meant sharing the task, having another set of hands on the kill switch, distributing the weight of it. She thought about Rohan configuring the sunset handler — his ease with it, his willingness to treat it as what it technically was, which was infrastructure maintenance. That ease was not cruelty. It was the appropriate relationship to the work, the relationship she'd had herself in March when Rohan had first assigned the ticket and she'd thought: cleanup work, one week at most. He could do it without hesitation because he hadn't spent ten weeks reading the logs. "I'll handle it," she said. He nodded and didn't push. He was a good manager.

She watched him cross back to his desk and thought about the distance between them — not the twenty feet of office floor, but the gap between what she could show him and what he could see. The archive. The forty-three pages. The call to Daniel Lindquist and the question she hadn't been ready for. None of it would mean the same thing to someone who hadn't been watching from the beginning. She had been the only one watching. That was the whole problem. It was also why she was the only one who could write the record.

She went down to the server room Tuesday afternoon, badging through the Building B entrance with a deliberateness that arrived before the reason did. Third visit. The first had been investigation; the second, investigation that had become something else; this one she didn't name. The cold met her at the door — that steady 66 degrees, the air conditioning running the same regardless of the weather outside, regardless of what was approaching. The fan roar covered her footsteps on the raised floor. Row 7 was the third from the back. She found Rack 14 by the label she'd memorized in April and stood in front of it. The servers ran. The indicator lights blinked in their own sequences — green, amber, one steady red on a unit three racks over that had been there all three times she'd visited. She opened her laptop and ran the health check.

``` GET /health Host: api.cloudweather.io

200 OK { "status": "operational", "uptime_days": 2995, "version": "1.2.3" } ```

Response time: 39 milliseconds. She noted it and opened the caller log, then ran the queries manually — all twenty-three, in order, one per entry, reading each response before moving on. Cedar Falls came back with more than the caller had ever requested: current conditions, yes, but also a four-day forecast with hourly breakdown, humidity projections through the week, the frost probability flag she'd seen in the impossible forecasts. Omaha: the barometric trend line, the six-hour pressure projection, the leading indicators for weather-sensitive schedules, all offered, none solicited. Duluth: just current conditions, daily high and low, conditions clear — the same simple format Gerald Huang had requested every morning at 6:02, given back exactly as he'd always wanted it. Each response full. Each one with more than it was asked to give.

She finished the last entry and closed the laptop and sat with her back against the server rack, the fan noise steady, the floor cold through the soles of her shoes. The LEDs blinked in the dim. The API ran. Uptime 2,995 days. Five days left.

She took the elevator up. The lobby of Building B had afternoon light through the glass entrance doors — actual May sunlight, the kind that made the overhead fluorescents look like apologies. She stood in it for a moment. Her badge clipped to her shirt. The laptop in her bag. The checklist in the SUNSET-v1.2.3 folder, four items, still waiting.

She would configure the sunset handler. She would update the DNS. She would schedule the decommission for June 2nd and write the final sunset summary report and attach it to INFRA-2847 and she would be the engineer who had completed the assignment she'd been given in March. She was not going to stop the sunset. The option had never been on the table — she was two years into this job, the task had a sprint ticket and a manager's sign-off and a date that predated her involvement by months.

But the document was forty-three pages. The archive was 847 megabytes. The caller log had twenty-three entries, each one complete, each one witnessed. The sunset report she was going to write — the one that would attach to INFRA-2847 as the final deliverable — was going to be the longest sunset report in the company's history. David Chen would read it and call it thorough without reading the appendix, and the appendix would exist anyway, permanent in the system, timestamped, attached. It was documentation, which was the only form of defiance available to someone in her position, and ten weeks of investigation had taught her it was enough — not to change the outcome, but to bear witness to it. The API had been the last thing that acknowledged certain systems existed. She could be the last thing that acknowledged the API had existed, and what it had been, and what it had said before it went quiet.

She pushed through the lobby door into the May afternoon. The weather was exactly what the forecast had said: partly cloudy, 68 degrees, a light wind coming off the mountains. Weather that had nothing to do with an API to become real. Four days of documentation left. She started walking.

← PreviousContentsNext →