Wheeler

Departure

Thirty-seven days before the failed return, Vela waited in Yard Nine with most of her hull closed and several important disagreements still exposed.

Construction berths occupied Catenary's least fashionable wheel. Their spin gravity varied by corridor, the air tasted faintly of cut alloy, and every public surface carried two sets of numbers: the architect's intended load and the mass that residents had actually attached. Welders crossed the open vault on articulated lines. Below them, if below could be trusted in a wheel, Vela rested inside a web of fuel, data, and cooling umbilicals. One half of her hull reflected the berth lights. The other half wore the black residue of earlier voyages.

Mara met Tala at the service lock. The pilot's welcome consisted of a pressure check and a brisk inventory of exits, after which she introduced the ship in the order she expected to need it: attitude, drive, navigation, power, air. Coffee entered the list between power and air, then moved upward when Tala asked whether the galley unit worked.

By profession Tala was a systems analyst. She had spent seven years tracing failures through municipal transit software, where vehicles remained on the ground and most state could be copied without consulting the laws of physics. Her last network had once reported itself restored while fourteen passenger cars waited between stations under manual power. The copied control state was perfect. It was also six minutes old.

Neris Venn, the transit director, had two platforms approaching their air limit and a crowd beginning to test locked doors. She ordered the network reopened from the green control state. Tala invoked the safety veto because the fourteen cars existed outside that copy. Neither woman had mistaken the pressure on the other. Venn needed movement before the platforms became dangerous. Tala needed the movement to account for vehicles the dashboard had forgotten.

The cars came back under local control. The public report called the service restored and attributed the additional delay to Tala's veto, both statements narrowly true. She embarrassed Venn, kept the report in her private records, and acquired the kind of reputation that becomes expertise only after another employer needs it.

Venn's reference contained no apology for the report and no criticism of Tala's veto. It stated that Tala would stop an operational system when its current state failed to account for the physical one, then listed the cost of employing someone willing to do so. The far-instrument mission had hired her for that experience, not because it was sufficient, and Osei made the distinction during their first conversation.

"Here," he said, looking at the folded reference from the transit authority, "six minutes can be farther away than another planet."

He was waiting in the machine room beside an open rack. Instead of a greeting, he handed her a field manual bound in gray cloth.

"Read the annotations before the printed text," he said. "The text was approved."

On the oldest title page, no author appeared. Sana had attached a provenance slip containing eight probable owners, three impossible dates, and a note that the binding adhesive matched a repair shop on Selene. One owner had calculated propellant in the margins. Another had corrected the calculations but preserved the mistake. A third had used the blank leaves to record the names of six pressure doors that no longer existed on any registered vessel. The book carried engineering forward without pretending that engineering had one uncontested author.

Beneath the slip, a handwritten instruction survived in faded blue ink.

Begin with a program that has nowhere to go.

Tala opened the Wheeler workspace at the terminal built into the rack and created a directory for the manual's programs.

mkdir -p tutorial

For the first exercise, the manual supplied tutorial/Wake.w and a complete source small enough to look less like a program than the space reserved for one.

classical class Wake {
  entry void main() {
  }
}

Authored text came first. In Wheeler, as in the transit systems Tala knew, a source file described the program before a compiler translated it into an executable artifact. The distinction mattered because changing the source did not reach backward through time and alter an artifact already produced from earlier bytes.

She invoked the compiler from the repository root.

wheeler compile tutorial/Wake.w -o tutorial/Wake.wbc

The compiler reported its output.

wrote tutorial/Wake.wbc

Inside Wake.wbc, canonical Wheeler bytecode formed the artifact. Compilation had checked the source rules and translated the program. It had not executed the empty body, a point the manual emphasized with a margin note written by someone who pressed hard enough to score the next three leaves.

A compiled promise remains a promise.

Execution required another boundary and another command.

wheeler run tutorial/Wake.wbc

After verifying the artifact, the runtime entered main, found no body instruction, and halted.

Wake (classical) halted after 1 steps

One entry transition. No declared state. No value to report. The run had done almost nothing, which left little room to disagree about what it had done.

Sana arrived while Tala was comparing the source and artifact digests. She requested both for the mission record, along with the compiler profile and run report. A thin Archive seal hung at her throat, turned inward so its inscription faced her shirt. On Catenary, where people advertised former institutions as readily as present loyalties, the choice was conspicuous.

When Tala asked whether an empty program deserved so much lineage, Sana looked through the rack toward the unfinished ship. A worker outside struck the pressure hull three times, listened, and marked the panel with chalk.

"The inexpensive records establish whether the expensive ones can be trusted."

Beneath that note, the next annotation added a state declaration.

classical class FirstSignal {
  state long lamp = 0;

  entry void main() {
  }
}

Here lamp named a state value owned by the program, while 0 supplied its initial value. The empty entry changed nothing, so an exact run ended where the declaration began.

FirstSignal (classical) halted after 1 steps
lamp = 0

At that moment Mara entered the machine room carrying a physical readiness lamp removed from the flight deck. Its lens was dark. She set it beside the terminal, where it acquired more presence than the number on the screen.

"Zero is accurate," Tala said.

"Accuracy has stages," Mara replied. "Make it ready."

An assignment inside main replaced the current program value. Tala renamed the small experiment and kept every other change visible in one complete source.

classical class CabinLamp {
  state long lamp = 0;

  entry void main() {
    lamp = 1;
  }
}

Now the state path had direction: 0 -> 1. The single = changed a value rather than comparing two values, and the runtime's final report reflected the transition.

CabinLamp (classical) halted after 3 steps
lamp = 1

Mara reinstalled the physical lamp without suggesting that the Wheeler value had touched it. The program modeled one condition. The hardware remained a larger system with power, wiring, control logic, and a lens that had collected a crescent of dust along its lower edge.

Osei took her place at the console. One transition, he said, concealed the question that mattered to him. He added a second assignment to a state named signal.

signal = 1;
signal = 2;

From an initial 0, execution followed 0 -> 1 -> 2. Reversing the two source lines produced 0 -> 2 -> 1. The statements were not an unordered collection of intentions. Source order selected a path, even when only the endpoint appeared in the final state report.

Sana, reading over his shoulder, objected to the path existing only in their explanation. A later edit could change the assignment while leaving the explanation intact, a form of durability the archive profession had learned to distrust. She placed an executable expectation after the transition.

assert(signal == 2);

Unlike the assignment's single =, the doubled == compared the current value with 2. assert required that comparison to hold at that position in the run. If it held, execution continued. If it failed, the runtime trapped instead of publishing an ordinary successful halt.

A passing assertion did not prove the program correct for every input, artifact, or target. It supported a smaller claim about one specified point in one execution. Its modesty appealed to Sana more than a broad promise would have.

By the end of the shift, station night had dimmed the berth lights, although Yard Nine itself never stopped. The restaurants along the inner rim served breakfast to one shift and fermented broth to the next. Families gathered at pressure windows to watch ships depart, and freight crews painted temporary constellations on hull plates before selling the plates for scrap. Inside Vela, the examples had converged on the departure interlock Mara actually needed reviewed.

Tala gave the known sequence a method name, depart, then called that method from main. A method collected instructions into a named body. A method call transferred control into that body and resumed after the call when the body finished.

In the manual's margin, the word return appeared beside its first correction.

Control returns to the caller.
State has not thereby returned to an earlier value.

One screen held the complete program.

classical class FirstWatch {
  state long berth = 1;
  state long drive = 0;

  void depart() {
    berth = 0;
    drive = 1;
  }

  entry void main() {
    depart();
    assert(berth == 0);
    assert(drive == 1);
  }
}

Before execution, Tala traced both values. berth would follow 1 -> 0. drive would follow 0 -> 1. The call would finish before either assertion examined the state.

She compiled the displayed source into its canonical artifact and ran it.

FirstWatch (classical) halted after 9 steps
drive = 1
berth = 0

Canonical output order placed drive before berth, though the names preserved which value belonged to which location. Both assertions had succeeded. The run therefore supported the bounded claim Sana attached to the departure record: this artifact, under this runtime profile, finished with the modeled berth released and drive enabled.

Mara waited for the record identity and Osei's review before enabling the physical sequence. She did not mistake caution for doubt. A pilot trusted systems by knowing the limits of what they had established.

Without ceremony, the clamps opened. Metal that had carried Vela's weight for nine months withdrew into the berth, and the ship moved under attitude control into the dark between structures. Weight left Tala's feet as the yard's spin released them. A loose washer, missed by three inventories, rose from the deck and crossed the bridge with stately confidence until Osei trapped it under his palm.

Catenary turned outside the forward windows: greenhouse bands, repair lights, a funeral lantern released from one of the old wheels, and then the bright line of Yard Nine rotating away. Tala had expected departure to feel like a line crossed. Instead the station remained visible, merely becoming an object she could cover with one hand.

On the communications panel, traffic control reduced their departure to a pair of values repeated in alternation.

Its next chapter bore the same spare title: Two Signals.