Release 014
Release 014 · VEX 0.2.11
Your Superboard key, told the truth.
The Settings section that links your Vex install to Superboard now says exactly why a link failed, lets you retry on the spot, and can issue a fresh key for the same install when the old one must go. Every sentence on that screen is resolved from a structured outcome the app recorded, never guessed from an error string.
Since 0.2.10, 1 pull request and 3 commits landed, all on the Superboard key arc. The server half ships separately in AgentScan.
01 · The link status says what happened
A cause, not a shrug.
Until now a failed link read "Couldn't link this key yet. Try again later." whatever the cause, and the app quietly re-sent the link every time you opened Settings. A tester whose key never reached AgentScan had no way to tell a refused key from a broken network, and neither did we.
One sentence per cause. AgentScan refused this key. AgentScan didn't answer in time. Couldn't reach AgentScan. The connection was redirected. Too many attempts. AgentScan isn't connected. This key couldn't be linked. Each comes from the failure kind the main process recorded, and the network cases are classified from the real error the runtime raised, not from its message.
The line you send to support. Under the sentence, a technical line shows the sanitized detail, when it happened, and a reference id that matches one line in the app's own log. The key itself never appears in either.
Retry, and Copy while you wait. Retry always tries again, right now. Copy works as soon as a key exists, because the key is valid the moment it is generated; only the link to AgentScan can lag. When the failure is on the network side the section says so: your key is valid, only the link is missing.
No more blind retries. A refused key or a lost identity holds until you press Retry. A network failure or a server error waits the interval the server named, thirty seconds when it named none. Opening Settings never re-sends a bind that was already refused.
02 · A new key for the same install
Generated once, replaceable on purpose.
Generate new key. When AgentScan advertises key rotation, the section offers a new key for this install. A confirmation names the consequence before anything is sent: your current key stops working in Superboard the moment the new one is linked, and you will paste the new one there. Cancel holds the initial focus; Escape and a click outside cancel.
A rotation is never half done. The new key is saved on this machine before the request leaves, and every retry sends that same key again until AgentScan acknowledges it. A lost answer therefore cannot leave you with two keys or with a rotation that neither side finished: if the server already applied it, the retry is accepted as the same rotation; if it did not, the retry applies it. The section says which key still works while that runs.
Only where the server allows it. The button appears only when AgentScan reports the capability, and the privileged process checks it again before sending. An older AgentScan never receives a rotation it cannot honour.
03 · AgentScan, the server side
Shipped in the AgentScan repository, deployed independently.
Rotation with a precondition. The bind endpoint accepts the key being replaced and swaps it in one atomic write: the slot must be empty, hold the old key, or already hold the new one. Anything else is a conflict, and a key another install owns stays a conflict.
Every bind and every partner read leaves a line. Operators can now tell a failed rotation from a failed first link, and a key that was never linked from one whose consent was withdrawn, without touching the database. No hash, key or identity is ever written to those lines.
Client faults are 4xx again. A malformed or empty request body answers 400, an unsupported content type 415, instead of a 500 that looked like a server outage.
04 · Before you update
Upgrade notes.
Migration 163 adds two columns to the local reporting state and runs automatically on first start. No manual action is required.
Two honest limits. The app now names a network failure but still does not route its AgentScan traffic through the system proxy or the operating system's certificate store; on a machine behind a corporate proxy or a TLS-inspecting antivirus the link can fail while the rest of the app looks online, and the section will say "Couldn't reach AgentScan". And the failure stays on your machine: a diagnostic report that reaches AgentScan from the user's side is the next step, not this release.