Architecture & Method

Nobody types
the weights.

BPOS learns which routes through its knowledge work. We decide how it learns. The work decides what it learns. Nobody sets a weight by hand, and that is a rule, not a habit.

A learned weight only means something while it is a function of what happened. Type it in once by hand and it stops meaning anything, even if the number looks sensible.

Three ways to move a weight

Our graph’s conductivity follows one law, explained in the pigeon article:

Dt+1(e) = (1 − λ)·Dt(e) + λ·(D0 + f0 + f1)

It settles at D* = D0 + E[f0 + f1]. There are three ways anyone could try to move a weight. Two are legal.

Two legal ways to move a weight: change the rule, which is global, rare, versioned and tested; or add an observation, which enters through f. The illegal way, typing a value into the state, is blocked, because it breaks the invariant that the settled weight is a function of the observations only.

Everything the world has to say enters as an observation. Everything we have to say enters as the rule. The state is the system’s to compute.

Legal 1: change the rule. The parameters and the form of the food: λ, D0, how the class baseline is read, and the shapes of f0 and f1.

These are global, rare and versioned. A change here ships as an engine release, with property tests that must pass on every build.

Legal 2: add an observation. A job walked a link and scored s over a path of length L. A retry through the link was decided, with a known effect. An approved change created a link, with a starting value the rule then owns.

Each of these enters through f. An operator’s approval is an observation too, with a stated weight. It enters exactly the way a job’s result does, and is counted rather than imposed.

Illegal: type the answer. D ← c. Writing a value straight into the state.

Why the third door is locked

It is locked for a reason you can check, not a matter of taste. The settled value only means something while D is a function of the observations alone.

Type D in once, and on that link the settled value is no longer the average of what the work fed it. The properties we test stop describing it.

Any ranking built on that link becomes a recipe wearing a weight. It looks learned. It is somebody’s opinion with a decimal point.

Illustration, not data. A link fed only by observations settles at the prior plus its average food. A link whose value is typed in stays wherever it was put, and the number no longer summarises anything.

An illustration, not data. The fed link ends where the work puts it. The typed link ends where someone put it.

The rule is ours to write. The observations are the work’s to make. The state is the system’s to compute.

The knob that was a trap

We learned the cost of a loose parameter the expensive way. The earlier rule had a growth constant beside the decay rate. It only behaved when the two were equal.

A knob that must never be turned on its own is not a knob. It reads as permission. When the rule changed on 14 September, the update kept a slot for that old constant that nothing filled.

For eight days, until 21 September, every update to every link was refused. Meanwhile a test of the old law passed on every build. It checked the law against its own arithmetic, not against the running system.

On 14 September the rule changed and left a slot for an old constant. From 14 to 21 September every update to every link was refused, while a test of the old law passed on every build. On 21 September the constant was removed and the rule's limits were written into the law.

A green test and a stopped system, for eight days. The fix was to remove the knob, not to guard it.

So the constant is gone. The law now states its own limits: a floor, so a link can always recover, and a ceiling, so the value stays readable.

A parameter that must never change on its own belongs inside the rule, not beside it.

How we will know it learns

Here is the test that separates learning from a recipe. Change what the jobs do, and the weights must change by themselves, with nobody touching the rule.

If they do, the graph is learning from the work. If they only move when someone edits a number, it is a recipe with extra steps.

That test has only begun. The law has had few observations, and most links still sit at their prior. We will publish the result when the record can carry it.

Common questions

Why not let people set weights directly?

Because the weight would stop summarising what happened. Every property of the rule assumes the weight is computed from observations.

Is an operator’s judgement ignored, then?

No. It enters as an observation with a stated weight, the same way a job’s result does. It is counted, not imposed.

What counts as changing the rule?

Its parameters and the form of its inputs. Those changes are rare, versioned, and tested on every build before they ship.

How do you know the system learns rather than follows a recipe?

Change what the jobs do and watch whether the weights move without anyone touching the rule. That test has begun and is not yet conclusive.

Related writing