Essays • • 21 min read

A Loop Is a Path That Closes

One of my health checks stayed red for eleven weeks by reading its own failure. A loop is the special case of a trajectory, the path that happens to close, and a life does not.

A Loop Is a Path That Closes

One of my health checks has been red since the middle of July, and until this morning it had no way to go green. The check exits with an error whenever it finds something critical. The scheduler that runs it records that exit as a failed run. On the next run the check reads the record of its own failure, counts that as something critical, and exits with an error. It had other complaints too, two of them about jobs I retired in August and never took off the register. But with every one of those cleared it would still have been red, twice a day, on the strength of its own last receipt.

I found it because I asked for an inventory. Not what my documents say runs underneath my days. What runs. The survey was read-only, and the list it came back with was not flattering. A pipeline documented in six places as running once a day runs twice. Thirteen registered loops have never once reported in. The health of my loops is judged in at least eight separate places. Five programs read the state of my repositories and return four different counts of how many there are: 44, 45, 46 and 52. Two of the three daily practices I built to run every morning have produced nothing since February 10, and the script that was supposed to start them is a file of zero bytes.

In July I counted thirty-two loops and sorted them into seven kinds. The register now holds fifty-two.

Every finding on that list is an answer to one question: did it run? A heartbeat says a job finished and nothing else. I have 5,739 of them on file since July, and together they tell me a great deal about the machinery and nothing about where the person the machinery is for is headed. I wrote in July that the only proof of life I accept anymore is a completed loop. I still accept it. It proves the thing is alive. It does not say where it is going.

The inventory was the first real job I gave a repository that is one day old. It is called Trajectory, and it exists because I think I have been building on the wrong word.

The path that closes

Mathematics settled this vocabulary long before I got to it. In the study of dynamical systems the general object is the trajectory: the path a system's state traces as time runs. Most trajectories never return to where they started. A few do, and those get a special name, a periodic orbit, a closed curve. So a loop is a trajectory that closes. The path is the general thing and the loop is the rare case where the path comes back.

I had the containment backward. I treated the loop as the unit and everything else as something loops produce.

Even the closed ones only close from where you choose to stand. I wrote the numbers down in a notebook last October. The earth goes around the sun at 29.78 kilometers a second, and from the sun that is a loop. The sun goes around the galaxy at about 230, on a lap of some 225 million years. Seen from out there the planet has never passed through the same place twice. The year is a circle in one frame and a long coil in the next one up.

The same motion in two frames. Seen from the sun, the earth traces a closed circle, a clock, and the question it can answer is where in the cycle we are. Seen from the galaxy, where the sun is itself moving at about 230 kilometers a second, the same motion is an open path that never passes through the same place twice, a drift, and the question it can answer is how far we have come.

Click the diagram to open it full size.

That entry opens with the star of the decan and an instruction to myself: "Review. Complete open loops." A few lines down, same page, same pen: "Perceiving reality from our earth based human perspective hides the true nature of time, that time is motion. My time is better measured in distance traveled through space." I closed my loops and then wrote that time is distance, and did not notice the two sitting next to each other.

In January the notebook came at it twice more. On the third, on a flight home, I wrote of seeing the planet "not as stationary being but living vessel with certain trajectory heading to some unknown attractor," and of "measuring time without clocks or time but through how much we have traveled." On the nineteenth, in the middle of a page about pens and birds, I asked "Are we not aboard a planet hurtling through space," and the entry ends on a line I had forgotten until this week: "And earth is planet in motion with trajectory currently unknown."

A body works the same way. A heart beats about a hundred thousand times a day, and every beat is a loop, the muscle contracting and returning to rest. The heart that finishes the beat is one beat older than the heart that started it, and the count is finite. Breath is a loop. Sleep is a loop. I keep a ten-day cycle of reflection, thirty-six of them a year, each one under a star, and the calendar brings me back to the same star every twelve months. I do not come back the same, and neither does anything I was working on.

I had this distinction in my working notes five weeks before I had the word for it. In August I sorted the things that move through time into two kinds. A clock is a closed cycle. It has a period, so you can ask where in the cycle you are: the week, the decan, the year. A drift is an open motion. It has a rate and no period, so the only thing you can ask is how far: a career, aging, grief. I wrote that asking a drift for its phase is a type error, the same mistake as asking what day of the week a career is on. I filed the two as equals. The notebook had been asking how far since October. I now think every clock I own is riding on a drift.

Whether the larger thing comes around again is a question I cannot test. Serious traditions say it does, and I own no instrument that says they are wrong. I have asked the page about it. One morning in January I wondered how many mistakes a person is allowed "before it is obvious this is not the life where karma draws down and looks like it could be an accumulation lifetime," and answered myself in the next line: "Or is that not how any of this works? Likely." A page from February is flatter about it: "Death has been certain and still is for what we can see." What I can observe is one run. It started on a date. It is here now. It will stop, and nothing in it has happened twice. I am going to build on what I can observe.

The constitution at the root of the new repository says it in two lines, one about a person and one about the model:

A human trajectory has an origin, a present, an unknown future, and a finite duration.

The durable top-level abstraction is trajectory: change through time, not recurrence alone.

A trajectory in this sense is not a forecast. The same August notes carry a rule I still hold: govern the band, not the trajectory. Past a short horizon, predicting the path of anything nonlinear is theater, and what stays knowable is the range it tends to keep inside. Nothing here undoes that. The word is doing a smaller job. It names the path already walked, kept as a record, plus a direction I declare, with the unknown future written into the definition. The design document says a trajectory is "not assumed to be linear, goal-directed, optimized, or predictable." Edgar Morin loved a line of Machado's that covers it in fewer words: traveler, there is no path; the path is made by walking.

The steersman had somewhere to go

In July I wrote that cybernetics takes its name from the Greek word for steersman, and in the next sentence I illustrated it with a thermostat and the governor on a steam engine. I had the etymology in my hand and picked the wrong examples.

A thermostat holds a point. It has no memory and no destination, and its best possible day is identical to the day before. A steersman holds a course. The correction at the tiller is a loop, error in and rudder out, many times a minute, and the whole reason for it is a ship that is leaving one place for another. Take away the voyage and the loop at the tiller is a man fidgeting with a stick.

The founding work had that shape. Norbert Wiener came to feedback during the war, on a fire-control problem: where will an aircraft be by the time the shell arrives, given a pilot who is trying not to be there. The problem was a trajectory and the loop was the method. The 1943 paper he wrote with Arturo Rosenblueth and Julian Bigelow defined purposeful behavior as behavior steered by feedback toward a goal. In that sentence the loop is the servant.

What came down to working engineers, though, was mostly the regulator. Hold the temperature. Hold the speed. Hold the replica count. I leaned on Ashby's law of requisite variety when I wrote about making complexity visible, and the theorem he later proved with Roger Conant says that every good regulator of a system must be a model of that system, which is the argument for a map in one line. Both are about holding. Neither says who chose the number being held. A thermostat does not pick sixty-eight degrees.

The cyberneticians who came next went after that gap. Stafford Beer drew an organization as nested regulators and then set two more functions above them, one that looks outward and ahead and one that says what the whole thing is for.

My reading is behind my borrowing. Meadows I have read. Ashby in pieces. Wiener's book I have not opened. Beer I know from a summary, which is how I came to map my own loops onto his five systems in July without having read a page of him. I keep rebuilding these fields by need and finding the name afterward. The shelf is the next piece of work, and I am early in it.

The notebook was ahead of the reading. One page from February starts with us as "mere passenger through space" and a few paragraphs on arrives somewhere else: "we are always moving so be selective with movement and know there is a trajectory and we are out of our very nature meant to steer the ship. To read the stars and guide the path as we all share in the direction we are pulled." That entry is published as Build the Rudder. It is a steersman's page, written five months before I went looking for the field that is named after him.

What the cluster forgets

My own trade had both halves of this and I had only been using one.

Kubernetes is built from loops. A controller compares what you declared against what is running and repairs the difference, and on purpose it does not care how the difference came about. It reacts to the state as it is, never to the sequence of events that produced it. That amnesia is the source of its sturdiness: a controller can crash, restart, and lose nothing, because it never depended on remembering. It is also why a cluster cannot tell you where it has been. Ask it what changed last Tuesday and you will need another system.

The other half of distributed systems is that other system. Keep every change as an event that is never edited, and derive the current state by reading the events forward. Pat Helland put it flatly: "The truth is the log. The database is a cache of a subset of the log." State is a position. The log is the path. And since Leslie Lamport's 1978 paper we have known there is no shared now between machines, only an order of events that can be established after the fact, which is why a careful event carries more than one timestamp: when the thing occurred, when it was observed, when the record arrived.

The controller is the loop and the log is the trajectory. A serious system runs both. Mine was fifty-two loops and a stack of receipts saying each one ran.

The nearest thing I have to that log is on paper. I publish my notebooks word for word, and when an essay here turns out wrong I append to it and leave the original standing. In April of last year I described the pen as "the capture of a present tense that cannot be gotten back to," and this June as "taking some action, creating both experience and record." I never thought of that as a design.

I got close to this in July. In the stack under the loop there is a floor for time, which keeps the transitions instead of the latest value, and a rule that what is out in the world, what the system believes, and what it is about to do must stay three separate things. Both ideas survive into Trajectory almost unchanged. But I drew them as floors in a building, and a building does not go anywhere.

One day of Trajectory

Here is what exists tonight. Five commits.

There is a constitution of ten articles at the root, and a check that fails if any schema uses a word the constitution does not list. There is one table that is history. It is append-only, and the database itself refuses an update, a delete, or a truncate on it, for every role. Everything that looks like current state is a view over that table. A correction is a new event, and the claim it corrects stays where it was.

Every event says what kind of claim it is, on one ladder:

OBSERVED → DERIVED → INFERRED → PROJECTED → RECOMMENDED → DECIDED → ACTED → VERIFIED

The first observer reads the git clones sitting next to it, forty-four of them. Names, branches and counts only, with no file contents and no commit messages. It looks at each clone as it is, the way a controller would, hashes what it sees, and appends an event only when the hash is new, so the loop reads the state and the log keeps every state the loop has seen. The first evaluator has two rules. Commits that exist nowhere but one laptop for two days are worth watching, and for fourteen days are worth acting on. Uncommitted changes nobody has touched for a week are worth watching. On its first run it surfaced three repositories to act on and four to watch, and each one checked out against git.

A machine's guess is stored as a guess. Where a repository's name matched something on my map, the observer recorded the link as inferred, at a confidence of 0.7, with the matching rule as its provenance. There were seven of those, and an eighth from a later adapter about where my loops belong on the map. In the first check-in I confirmed all eight, and each confirmation went into the log as a new event at the level of decided, with the guess still sitting underneath it. The store has one rule about this that I like more than anything else in the design: an inference cannot overwrite a decision. The observer will make the same guesses every hour for as long as it runs. A no from me would outlast all of them.

Here is the whole of it on one page.

How Trajectory holds together. An hourly observer reads the world and appends events to one append-only log, each event labeled with the kind of claim it is. Current state is a view derived from the log. Two rules raise situations, a readout shows them, and a person decides. The decision is appended as a new event with the earlier guess left underneath. The machine observes, interprets, recommends and verifies; the human decides and executes.

Click the diagram to open it full size.

Nothing acts. The loop contract grants observing, interpreting, recommending and verifying to the machine, and deciding and executing to me. It will tell me that a repository holds ten commits that exist nowhere else. It will not push them.

Then an adapter read two stores I already had: the loop heartbeats, and one row per day of journal counts going back 608 days, with none of the text. The log went from 212 events to 6,650 in one load. The decision record for that step notes that most of the log is now "a loop ran," which is evidence about the machinery and not about the world.

It is easier to say what is missing. I have not written a single intent, so attention is ranked by two rules about git and nothing else. I have recorded no decision of my own apart from those eight confirmations. The description of my current season is still in the design document's wording, not mine. There is no copy of the log off the laptop. It can tell me which repositories hold work that exists nowhere else. It cannot tell me anything about where I am going, because I have not told it.

The repository was built in agent mode, in a day, and it does not pretend otherwise. Several of its decision records carry a line saying which choices were made by the agent in that session and are mine to overturn. I intend to read those lines again in a month.

The last article of the constitution is the one I would keep if I had to throw out the other nine. Navigation, not control, is the purpose. An earlier article bars the obvious failure by name: no life score, no productivity score, no optimization target in the kernel. That one has to be written down because I know the pull. "I want to be bound up," I wrote in March of last year. "I want to be measured forward, tracked from behind. A prison of our own making." A few lines later the same page takes it back: "And there really isn't any measuring. No amount in the tank that changes the outcome." The map informs. The navigator decides.

Where this leaves Complexence

It leaves it where it was. Complexence is the capability, the word for standing inside something larger than yourself and still choosing. It has a summer of essays behind it, a public repository, a candidate measure with its debts listed, and an experiment that came back null. Trajectory has one day. It does not replace the word and it is nowhere near its level.

What it does is correct one sentence. In June, under the heading "The loop under everything," I wrote that underneath all my concepts is the same loop, and I drew it: perception, maps, orientation, decision, action, feedback, learning, and an arrow back to perception. I am leaving that as written. The amendment goes here.

The arrow does not go back. It arrives at a later perception, in a person who has changed, of a world that moved while the turn was being made. Draw the same diagram with time as an axis and the circle opens into a coil. The loop is the shape of one turn. Complexence is being good at the turn, on a system you cannot fully hold. The trajectory is what the turns add up to, and it is the reason for making them.

There is a third piece. Fidelitron is the bench where a system gets rebuilt small enough to test, the practice behind the smallest world that still tells the truth. In August I titled the decision record behind it "Reality runs once." The argument was for the lab: you cannot rerun a day with one thing changed, so a model you can run twice is the only instrument that can measure what a small change does. It is also the plainest case for the word trajectory I have written, and I wrote it for a different reason. A life runs once, which is the reason to keep a small world around that can be run again.

Complexence supplies the question worth asking. Fidelitron supplies evidence. What it finds can enter the log, and it gets no say in what I intend. Where Trajectory sits between them is not settled. The design document draws it under Complexence and above Fidelitron. The map I drew for Fidelitron in September has four layers and no slot for it. Tonight I would call it the record: the place where the questions, the evidence, and the decisions get written down in the order they happened.

Trajectory may turn out to be the wider frame. The word applies to anything that persists while it changes, a person, a repository, a cluster, a planet, where loop applies only to what recurs. I think that makes it more general. I have thought so for one day.

Thirty days

The vocabulary is frozen until October 31. On that day one rule applies: delete or simplify anything that did not improve orientation, attention, memory, or agency.

I can say now what would count against it. In August I named the likeliest way a document this wide goes wrong: it feels true and changes nothing. If the log is still mostly "a loop ran" at the end of the month, I have built a second monitoring system and given it a grander name. If I have not recorded five real decisions and gone back to write down what came of them, then the one thing a loop cannot produce, a record of what I knew and chose and what happened next, never got made. If keeping the map costs more attention than it returns, it fails the test I set in July, and that test does not care how good the constitution reads.

And there is the trap I have named before and walked into anyway, which is perfecting instruments instead of using them. The inventory found the evidence for that one on its own. Two of those daily practices have been silent since February, and the file that was meant to start them is empty.

The health check no longer judges its own receipt. In a dry run it went from five critical findings to two, and the two that are left are real.

In January I wrote that the earth is a planet in motion with trajectory currently unknown. That is still the state of the record, for the planet and for me. What changed this week is that something is writing the path down.

Sources for the ideas borrowed here: Norbert Wiener, Cybernetics (1948); Rosenblueth, Wiener and Bigelow, "Behavior, Purpose and Teleology" (1943); W. Ross Ashby, An Introduction to Cybernetics (1956); Conant and Ashby, "Every Good Regulator of a System Must Be a Model of That System" (1970); Stafford Beer, Brain of the Firm (1972); Leslie Lamport, "Time, Clocks, and the Ordering of Events in a Distributed System" (1978); Pat Helland, "Immutability Changes Everything" (2015).