hive-agent: order a stored login by when the store wrote it, not by its number
A delete removes the leaf's metadata, so the KV number restarts at 1. A login made right after a delete, before the next poll, was version 1 again and looked no newer than the recorded 1, so it never installed. The version file now records the store's write time next to the number and a later write installs whatever its number. A record from before the time was kept falls back to the number and gets its time when the same number is read again.
This commit is contained in:
parent
5f5933fde9
commit
4b1012056c
1 changed files with 275 additions and 65 deletions
|
|
@ -54,20 +54,24 @@ reads the credential.
|
|||
and every version of it, not just the newest: an older version is still a
|
||||
session. An agent that already holds a session logs out too, the next time it
|
||||
reads the store: within 5 minutes, or when a paused agent resumes (see
|
||||
[the harness's rule](#why-the-harness-takes-only-a-newer-version)).
|
||||
[the harness's rule](#why-the-harness-takes-only-a-newer-login)).
|
||||
|
||||
## Why the harness takes only a newer version
|
||||
## Why the harness takes only a newer login
|
||||
|
||||
`claude` rotates the refresh token in `.credentials.json` as it uses the
|
||||
session, and the agent can't write the store. After the first refresh the
|
||||
stored copy is stale. A harness that installed it whenever the bytes differed
|
||||
would replace the agent's live session with a stale copy and log the agent
|
||||
out. The harness therefore compares the store's KV version with the last
|
||||
version it installed (`claude-credentials-version` under the harness dir):
|
||||
out. The harness therefore compares the store's version with the last one it
|
||||
installed (`claude-credentials-version` under the harness dir), by the time
|
||||
the store wrote each. A delete restarts the KV number but not the time, so a
|
||||
login right after a delete, version 1 again, still counts as newer. A record
|
||||
from before the harness kept the time falls back to the number, and gets its
|
||||
time the first time it reads the same number.
|
||||
|
||||
- it installs a newer version, that is, a new login;
|
||||
- it leaves an equal or older version alone, even when the agent needs a
|
||||
login again, so it never puts back a session that has gone bad;
|
||||
- it installs a newer write, that is, a new login;
|
||||
- it leaves an equal or older one alone, even when the agent needs a login
|
||||
again, so it never puts back a session that has gone bad;
|
||||
- it logs the agent out when the store holds nothing although a version was
|
||||
installed: the operator deleted the stored login. A read that failed never
|
||||
does it, since an unreachable store says nothing about the login. The
|
||||
|
|
|
|||
Loading…
Reference in a new issue