Two teams close the same block. Same target frequency, same coverage figure, same clean signoff, the same wall of green in the same order. Read the two dashboards side by side and you cannot tell them apart, because a dashboard is a photograph of a place, and both teams are standing in it. What the photograph cannot show you is that one of them walked there and the other one ran, that one route passed through country the other never saw, and that the two designs are the same only in the single respect the picture was built to record. This article is about the difference between where you arrived and how, and about what happens to the how when the thing doing the arriving is fast enough to forget.
A coordinate erases the road to it
Consider what a green cell records and what it does not. When a stage closes, it writes down a condition: this metric crossed this threshold, this check returned clean, this state was reached. That is a coordinate. It names a point in the space of possible outcomes and asserts that the design is now located there. It is exact, it is checkable, and it is the thing the whole flow was built to produce.
What the coordinate cannot carry inside it is the trajectory that ended at that point. Two designs can reach the same coordinate by routes that share almost nothing. One closes timing on the first placement it tries; the other closes it after a route that fought congestion across three floorplans and spent its margin buying back a critical region. One reaches its coverage number by exercising a wide spread of the design; the other reaches the identical number by pounding a narrow band of behaviour until the counter fills. The endpoints are indistinguishable. The journeys are not even similar. And the dashboard shows you the endpoints.
This is not a defect in any particular tool. It is a property of what a final state is. A coordinate is a summary, and the price of a summary is everything it summarized away. The moment the point is written down, the road that led to it is gone from the record, not hidden but absent, because the record was never a shape that could hold a road. A final state is a location. A journey is a history. The instrument that captures the first cannot, by its construction, capture the second, and we have spent decades reading the location as though it implied the history.
Coverage of state is not coverage of history
Coverage is the discipline we trust most to tell us we have been thorough, so it is worth looking at exactly what it counts. A coverage model enumerates conditions, states, transitions, values, and reports which of them were reached. It answers a question of the form: was this thing visited at least once? That is a question about state. It is a question about which points in the space got touched.
Notice the shape of what it does not ask. It does not ask how many distinct paths reached a given state, or whether the state was reached the same way every time, or what the reaching cost. A condition covered once by a broad and varied stimulus and a condition covered a thousand times by the same narrow loop report identically: covered. The counter does not distinguish a state that the design falls into from many directions from a state it can only enter through one improbable corridor. Both are green. The diversity of the routes into a state, which is very close to the thing an engineer means when they say a block has been exercised, has no cell.
And the cost of the route has no cell either, which matters more than it first appears. Two runs can arrive at the identical endpoint having spent utterly different amounts of the thing that decides whether the design is any good. The same closed timing, reached in one case with slack to spare and in the other by consuming every picosecond of margin the block had. The same coverage number, reached in one case by a stimulus that would find the next bug and in the other by a stimulus that has already shown you everything it will ever show you. The endpoint is a scalar. What it cost to stand there is a quantity the endpoint does not carry, and it is frequently the quantity that governs what happens next.
So coverage, our best answer to the question did we look everywhere, answers a narrower question than its name suggests. It measures the reached set, the union of states we touched. It is close to silent on the reaching: how we got in, how many ways there were, how much we burned doing it. Coverage of state is not coverage of history, and the gap between them is exactly the gap between a place and the road to it.
Two trajectories, one wide and cheap, one narrow and dear, converge on one green endpoint. The endpoint records the arrival and nothing of the arriving. The diagram is conceptual.
In a human flow, the path lives in heads
For as long as people ran the flow, the trajectory was not lost when the coordinate was written. It went somewhere the dashboard could not reach but a person could: into memory. Ask an engineer who closed a block a month ago and they will tell you things no report contains. Which region kept fighting them and only came in after the third attempt. Which single fix was load-bearing, the one change without which nothing else would have held. Which greens were earned against resistance and which were arranged, tuned into place by a constraint that made the number move without making the design better.
That memory is unreliable. It fades, it flatters the rememberer, it compresses a week of struggle into a sentence and forgets which sentence. It is unlogged, which means it cannot be audited, queried, or handed cleanly to the next person. By every standard the flow uses to judge evidence, the human memory of the path is poor evidence. But it exists. It is a second record, running alongside the dashboard, holding precisely the thing the dashboard drops: not where the design ended up, but what it took to get it there, and how much of that arrival to trust.
This is why a review with the person who did the work is different in kind from a review of the numbers they produced. The numbers are the coordinate. The person is the last surviving copy of the trajectory. When a reviewer asks why is this one green and gets back not the value but the story, that story is the history the metric could not carry, retrieved from the one place it was kept. The flow leaned on this without ever writing it down as a dependency. The trajectory did not need a cell because it had a keeper.
In an agent flow, the path is only what was logged
Put an agent where the person was and the second record does not thin out. It disappears. This is the hinge of the article, so it is worth stating with care, because it is easy to mistake it for a complaint about agents and it is not one.
An agent works toward a target and reaches it, often by a longer and stranger route than a person would have taken, because it can try more things and abandon them without fatigue. But when it is done, it does not carry a memory of the struggle. There is no faded, flattering, compressed recollection of which region fought back, because there is no rememberer standing at the end of the run holding an impression of it. What the agent carries forward is the final artifact and whatever telemetry someone decided in advance to record. The trajectory is not stored in the mover. It is stored, if at all, in the log.
And logging is optional. This is the part the flow was never designed to notice. When a person ran the stage, the trajectory was captured whether or not anyone asked for it, as a free side effect of a mind having been present. When an agent runs the stage, the trajectory is captured only to the exact extent that someone thought, ahead of time, to keep it. Whatever was not instrumented was not merely un-reviewed. It did not persist. The run ends, the coordinate is written to the dashboard, and everything about the path that no telemetry named ceases to exist, not filed somewhere inconvenient, gone. There is no head to go back and ask.
So the two flows are not the same flow with a faster worker. In the human flow the trajectory is unreliable and present. In the agent flow the trajectory is precise wherever it was logged and absent everywhere else, and the default width of everywhere else is large. We replaced a poor keeper of the path with no keeper of the path, and because the coordinate looks identical in both, the substitution left no mark on the thing we look at. The dashboard reads the same. Behind it, the second record has been quietly switched off.
Same endpoints is not agreement about them
It would be fair to push back here and say the endpoint is what we care about, so let the history go. If two runs land on the same set of endpoints, are they not, for every purpose that matters, the same result? Here is one place inside our own flow where the answer came back no, and came back cleanly enough to keep.
We ran our static-timing engine against an independent reference on the picorv32 vehicles and compared endpoint by endpoint. The two arrived at the same set of endpoints. The endpoint ratio was 1.0000. Every timing endpoint the reference reported, our engine reported; the sets matched with nothing left over on either side. By the measure a dashboard would use, this is the picture of agreement, two runs standing on identical ground.
And the per-endpoint values did not correlate at all. On the very rows a baseline had labelled correlated, the numbers attached to each shared endpoint told two different stories. Same points, different values at the points. The two runs had reached the same state and disagreed about it, and the disagreement was sitting underneath a perfect set match where no set-level report would ever surface it. The record states the lesson without softening it: Counting the same endpoints is a precondition for correlation, not correlation.
Read what that separates. The endpoint set is the STATE: which points exist, which conditions are present. The per-endpoint values are a trace of the HISTORY: what each path produced when it arrived. Two runs matched perfectly on the STATE and diverged on the HISTORY, and a report built to show only the matching set, the endpoint ratio of 1.0000, would have declared them equivalent and moved on. The coordinate agreed. The road did not. The whole gap between a place and the journey to it, argued in the abstract through this entire piece, is sitting in that one pair of runs as an inch of daylight between a ratio of 1.0000 and values that share nothing. Reaching the same endpoints was not the same as agreeing about them, and only a report that declined to stop at the set could tell.
What would path coverage even mean?
If state coverage answers did we reach this point, then the question the agent flow forces on us is a different one: which of the possible routes to this point did we take, and which did we never explore? That is a question about trajectories, and we do not have an instrument for it. It is worth sketching what one would have to treat as first-class, without pretending the sketch is a solution.
The first move is to stop treating the trajectory as exhaust and start treating it as an object. Today the path is a byproduct: something that happened on the way to the result and was discarded when the result was written. Path coverage would require the run to emit its route as a recorded thing in its own right, a sequence of the decisions taken and the branches declined, so that two runs reaching the same endpoint could be compared not by their coordinates but by their roads. The comparison we did on picorv32 endpoints, value by value rather than set against set, is a shadow of this: it is what you see when you refuse to let the trajectory collapse into its endpoint before you look.
The second move is genealogy. A metric at a late stage is the descendant of decisions made at every stage before it, and the lineage is invisible in the number. Path coverage would ask a green cell to name its parents: this timing result rests on that placement, which rests on that constraint, which was set to make that earlier number move. Trace the genealogy of a metric across stages and an arranged green looks different from an earned one, because you can see where in its ancestry a value was tuned into position rather than achieved. The number alone cannot tell you which it is. Its lineage can.
None of this is solved. A recorded trajectory is enormous, most of it is noise, and we do not yet know which slice of the road is the load-bearing part worth keeping. Naming the parents of every metric across a full flow is a data problem no one has closed. The point of the sketch is not that path coverage is around the corner. It is that the question is well-posed and unanswered, and that the flow currently does not even have the vocabulary to say which routes it left unexplored, because it was built to record only where it stopped.
For as long as people carried the flow, the road was kept in their heads, badly and for free, and we could afford to measure only the destination because a keeper of the journey came included. That keeper is gone from the stages we have handed to agents, and it did not leave a gap on the dashboard, because the dashboard was only ever a picture of the place. So the question at the end of a run is no longer the one we spent a career learning to ask. Not is it green. The greens are many, and they are not the same green. Which of the many possible greens did we get, and what did we spend, and what did we never see, on the way to this one? The coordinate will not answer that. It was written the instant the road was thrown away.
