Skip to content
Lockstep
reading chainShowing sample figures until the read completes.

Version drift

What changed since you approved it

An approval is for exact bytes, not for a name or a version string. When a publisher ships different code, the hash changes and the no longer matches, so every fund-moving call from that skill is refused at until the account owner looks at the difference and decides again.

1 of 1 needs your decision.A widened release can call something the version you approved could not, or move more native value in one transaction. Those are the ones worth reading. The rest only narrow what the skill can do.

kuru-quote

accountapproved pin
widened · approval required

approved

9b68…0b80

59

of 64 differ

on disk

960e…b4da

approved0x9b68b339278fd5f40079090a0a535d6c687aaacbb36d9ef888a942a12c600b80
on disk0x960ea319b251ab8699fb8fa916c6e27e17ddc1938df41065a63c2227229bb4da
not checkable

These figures are a worked example, so there is nothing to verify against a chain. Point this build at a registry and a command appears here.

Gained

2
  • approve(address,uint256)high risk
    on
  • transferFrom(address,address,uint256)high risk
    on

Powers the approved version did not have. Each one needs a fresh decision.

Kept

1
  • swap(uint256)
    on

Declared by both versions.

Dropped

0

Nothing removed

A narrowing. Never requires re-approval.

Native value ceilingno native value1 MONraised

The moment of enforcement

Watch a call reach the guard

Before an agent can move money, the guard checks that the code asking is the exact code you approved — byte for byte. Flip the switch below to change what the publisher ships, and watch the same call succeed or get turned away.

Step 1. Choose what the publisher ships

This is the only thing you control here. Everything after it is the guard reacting.

The publisher ships…

Try both. The call is identical either way — only the code behind it changes.

Step 2. The call travels to the guard

The guard compares two hashes. It never reads the code, so it cannot be talked round.

A call is waiting at the skill.

Step 3. The guard decides

Checking…

The guard reads the hash pinned in the registry and compares it with the hash the call handed over. It never looks at the code itself, so there is nothing to argue with.

Why a rebuild does not interrupt anyone

Widening means one of two things and nothing else: a new (target, selector) pair, or a strictly higher native-value ceiling. Removing a capability or lowering the ceiling is a narrowing. Every change of bytes still needs your approval, whichever it is — what the distinction changes is how loudly you are asked, not whether. That is the difference between a permission system people read and one that trains them to click through.