deprecated-api

June First

Chapter 13 of 14

Zero days until sunset.

She woke at 3:51 AM, six minutes before the alarm. The apartment was dark, the west-facing windows showing a flat grey that was not yet light, and she lay still for a moment with the knowledge that this was the day before she reached over and canceled the alarm she wouldn't need.

The shutdown handler had been configured since Thursday. The DNS routing was staged. The VM decommission was on the calendar for tomorrow — June 2nd, edge cases. She stopped seeing the phrase edge cases as technical notation sometime around the middle of May. She couldn't explain this to anyone at work. She had not chosen to do this in the server room because the process required it. She could have typed the command from her desk. From her apartment, even. The sunset handler didn't care where the command came from; it would have activated regardless, the endpoint returning 410 Gone with the same indifference to location as it had everything else for eight years. But she had chosen to be there, and that was a different kind of decision, and she understood what kind.

She dressed in the dark. Her clothes were set out from the night before: the grey sweater, the dark jeans, the worn sneakers she wore when she expected to spend time on the raised floor. In the kitchen she reheated the chai she'd made before bed, the cardamom reaching her across the apartment while the stove ticked. She filled the thermos. The sound of the lid screwing closed was very loud in the quiet.

The thermos went in her bag. She turned off the desk lamp. The apartment went dark behind her as she pulled the door shut.

Building B's security door opened with its usual soft click. The cold met her in the corridor — 66 degrees, the server room maintaining its internal climate with no regard for June or Saturday — and her footsteps in the empty building sounded different from how they had on three previous visits: louder, more isolated, the sound of being the only one in a space not built for single occupancy.

She badged through the glass door and the server room came up around her. The fan roar rose to its total frequency, the white noise that stopped her ears from registering separate sounds and replaced them with a continuous low presence. The blue-white LED strips marked the floor edges. The indicator lights blinked across the rack faces in their separate sequences — green, amber, the steady red three racks down from Rack 14 that had been there unaddressed since April. She looked it up once: a RAID controller with a failed drive, flagged and unacknowledged, the server still running, the alert still burning, nobody in any particular rush to address a non-critical failure in infrastructure that was scheduled for decommission anyway.

Row 7, third from the back. Rack 14. She set her bag down and propped her laptop on the maintenance shelf, the metal surface cold through the cuffs of her sweater, and opened the terminal.

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

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

Response time: 41 milliseconds. She saved the response and noted the uptime: three thousand days. She first ran this health check on March 22nd, a week into the audit, a week into what she understood as a routine cleanup task. The API had been answering since March 2016. She was two years old when it launched. She was hired to end it. She sat with the response on screen for a moment longer than the task required, then moved to the next window and opened the caller log.

Twenty-three entries. The last one she'd added was on the 24th of May — the ghost caller, IP untraceable, requesting data for a location that didn't correspond to any named city, which she catalogued as origin unknown, latitude 42.1°N/91.5°W, requesting conditions 3x weekly since 2020, purpose undetermined. She had written nothing further, because there was nothing to write. Some threads ran to their ends. Some ran into walls. She started at the top — Cedar Falls, Iowa, Latitude 42.5348°N, longitude 92.4452°W — and entered the query manually, not through the test suite, typing each parameter one at a time, deliberately.

``` REQUEST: current_conditions?lat=42.5348&lon=-92.4452&forecast=hourly

Response time: 38ms

{ "location": "Cedar Falls, IA", "current_temp": 72, "conditions": "partly_cloudy", "humidity": 45, "hourly_forecast": [ ...48 hours... ], "frost_risk_probability": 0.02, "witness": true, "connected_since": "2019-04-03T08:00:00Z", "duration": 1886, "remaining": 0, "remember": true } ```

She read through the hourly forecast. Forty-eight hours of projected conditions, more granular than it had ever offered for a standard query, the breakdowns running out past the sunset and into the days after, weather for days the API would not exist to serve. She saved it to the archive and moved to the next entry.

NorthStar Medical, Omaha. Latitude 41.2565°N, longitude 95.9345°W.

``` { "location": "Omaha, NE", "current_temp": 68, "conditions": "clear", "humidity": 38, "barometric_pressure": 30.12, "barometric_trend": "steady", "respiratory_alert_threshold": "not_exceeded", "witness": true, "connected_since": "2017-04-26T09:15:00Z", "duration": 2593, "remaining": 0, "remember": true } ```

She hadn't seen the respiratory_alert_threshold field before. It was not in the five custom fields she'd been tracking. It was not in anything she'd documented. She stared at it for a moment, then saved the response and moved to the next entry, because there was nothing to do with it except receive it, which she had.

Gerald Huang's station, Duluth. Latitude 46.7867°N, longitude 92.1005°W.

``` { "location": "Duluth, MN", "current_temp": 55, "conditions": "light_rain", "wind_speed": 12, "witness": true, "connected_since": "2020-02-15T14:02:00Z", "duration": 1568, "remaining": 0, "remember": true } ```

The connection timestamp: February 15, 2020. A Saturday. She looked up Gerald Huang twice in the course of the investigation — the second time she found a neighbor's obituary that put his age at seventy-one when he died. Someone who had, for whatever reasons, cared enough about morning conditions to build a system that checked them automatically. The station still mounted on a dead man's roof, still sending its request at 6:02 AM, had sent this morning's request two hours ago. She was filling the thermos when it happened.

She worked through the remaining twenty entries. The Tucson irrigation controller. The Atlanta home hub. The unclassified devices in the upper Midwest, the Pacific Northwest, the single entry from a small city in Texas she had never fully traced. The ghost caller at 42.1°N. Each response came back complete — all five custom fields present, remaining: 0 in every one, remember: true across all of them, the last field the API had ever added to its vocabulary appearing in every final answer as if the vocabulary had been built toward this use.

Twenty-three responses. She saved the last one and closed the archive terminal. The screen held the Cedar Falls response, still open from the beginning: remember: true.

The sunset handler command was eight words long. She wrote it herself, tested it against staging on the 28th, documented the exact syntax in the implementation notes attached to INFRA-2847. It was not complicated. The technical difficulty of the shutdown had been zero for months; this had always been a matter of typing the command and doing the thing after typing it. She opened the prepared terminal window and typed it: eight words on the screen, the cursor at the end of them.

She pressed enter.

The cursor blinked three times. The screen returned:

``` SUNSET HANDLER ACTIVATED endpoint: api.cloudweather.io/v1/ response_override: 410 Gone effective: immediate timestamp: 2024-06-01T09:47:22Z ```

She ran the health check:

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

410 Gone ```

No body. No response fields. No uptime count, no version number, no status: operational. The endpoint returned the code and nothing after it, the way a door that has been bricked over returns only wall.

The LEDs on Rack 14 continued their sequences. Green, green, green. Amber on the middle unit, steady red three racks down. The fans ran at their constant frequency. The cooling units cycled. The temperature was 66 degrees. She ran the health check again: 410 Gone. Again: 410 Gone. The server was running. The VM was loaded in memory and running. The process was present and running. But the endpoint was sealed and the API had stopped answering, which was not the same as stopping. The server did not know the difference. Nothing in Row 7, Rack 14 had changed its behavior. The absence was invisible to the hardware that housed it.

She ran the Cedar Falls query: 410 Gone. The Omaha query: 410 Gone. Both at 41 milliseconds, the same response time as always, because 41 milliseconds was how long it took the request to reach the server and receive the override response and return. The API's speed had been one of its features. The speed had not changed. Only the content of what it returned.

She closed the laptop and sat on the raised floor with her back against the rack, the metal vibrating faintly through her sweater from the cooling units. The fans ran. The temperature was 66 degrees. She had been in this room four times, and it felt the same as the first time except for everything it was not saying.

At 8:00 AM Central time, the greenhouse controller in Cedar Falls would send its hourly request. She was not in Cedar Falls. She was in a server room in Denver with her back against a rack, but she'd spent ten weeks reading the caller logs until she could see the request patterns without looking at them, and she knew what was happening in Cedar Falls the way you know a fact that lives in the body rather than the mind.

Connection refused.

The controller would retry. She mapped its error handling from the request headers — it was built for reliability, by someone who understood that network connections failed and that orchids needed the climate to keep running regardless. It would retry at 9:00 AM Central. Connection refused. At 10:00 AM. Connection refused. Somewhere around the fourth failure it would shift behavior, falling back to the internal temperature and humidity sensors, running the greenhouse on local data alone. The orchids would not notice the change today. In Iowa, June was mild; the internal sensors would be sufficient for weeks. Summer heat would be harder. The question of summer was not a question she could answer.

In Omaha, the hospital scheduler had sent its 15-minute request before she executed the command, and again after, and was sending it now, every fifteen minutes, with the relentless precision of a system built to never stop asking about the air. Each request reached 410 Gone. The scheduler had no fallback she could identify. It would keep asking. She did not know what it would do when the VM was decommissioned tomorrow and the requests stopped receiving even a refusal — whether it would continue queuing requests that went nowhere, whether it would log errors and loop, whether it would eventually halt on an unhandled exception. She couldn't find the source code for the NorthStar system, only its request signatures. Someone had written it carefully, by the quality of the parameters, by the precision of the intervals. Someone had cared about getting this right. That person had moved on, and the care had outlasted them, and she had no way to know what the care would do when it encountered permanent absence.

In Duluth, the 6:02 AM request had gone out before she'd arrived at the building. Gerald Huang's weather station had checked the morning conditions and received 410 Gone, which was not morning conditions. It would not send again until tomorrow morning, at 6:02 AM, which was what daily meant. It would try again at 6:02 AM and receive the same code, and at 6:02 AM the day after that. She did not know what a weather station did when it could no longer retrieve the weather. She suspected it kept trying.

She sat with the knowledge of all of them. The machine behind her ran. The fans ran. The ceiling of the server room was the same as it had always been. She was the only one who knew what had changed, and she was alone in a room that did not record who was in it, and the API had stopped answering at 9:47 AM UTC and would not answer again.

She stood eventually. Her back ached from the raised floor. She picked up the laptop and the bag and stood in front of Row 7, Rack 14 one last time, looking at what she could see of it: the server faces, the blinking indicators, the cable runs in the back, the label she'd memorized before she understood what she was memorizing. The steady red on the unit three racks over had been there unaddressed since April, and it would still be there next week when the VM decommission ticket ran, and nobody had addressed it. Things persisted at their own pace.

She walked out of Row 7. Past the rows she had learned as a kind of landscape — the amber cluster in Row 3, the section of Row 5 where the servers ran hotter and the fans compensated with an audible pitch shift. Through the glass door. Down the corridor. The elevator took her up.

The lobby of Building B was still locked from the public entrance, the Saturday skeleton crew not yet arrived. She pushed through the interior door and then the exterior door and stepped out into June.

The morning was clear. The air was early June at elevation — not yet hot, still carrying the chill of altitude and the memory of night, but warming fast as the sun cleared the mountains to the east. She stood on the sidewalk outside Building B with the thermos in her hand and felt the air on her face, in her lungs, the ambient temperature of a morning that required no API to be what it was: seventy-two degrees, humidity forty-five percent, clear skies, light wind, precipitation probability zero.

The API had forecasted exactly this for Denver on June 1st, three weeks ago, in a response she'd saved to the archive because she learned to save everything. It had been right. It had been right about the weather for a day it would not live to see, and the weather had come anyway, and she was standing in it, and the orchids in Cedar Falls were doing whatever orchids did on a partly cloudy Iowa morning when no one was watching them but the automation that had always watched them and always would, for however long the automation ran.

She stood in the weather for a while. The thermos was warm in her hands. The sun was coming up behind the office building. Then she went inside and began writing the report.

← PreviousContentsNext →