Alstead · The Log
The Alstead Log
What changed, and when.
One numbered note per release, and one on Friday whether or not anything shipped. Written by whoever shipped it. The entries name the faults we found in our own work, because a list of wins on its own is not evidence of anything.
Newest first. Nothing here is removed or rewritten after it is posted; a correction is a new entry that says what it corrects. For what the product does and does not do today, read Where Alstead stands, which carries the date it was last confirmed.
Entries
No entries yet. The first one goes up with the next release.
-
Scheduling that survives a restart, and two gaps in our own agent-key controls.
This is the first entry. It covers 20 to 22 October 2026. Alstead is a web alpha: invite-only, free while in alpha. Everything below is either live on alstead.asv-labs.com or named here as not live.
20 October
A second independent audit ran against a release-candidate build, covering separation between workspaces across 73 endpoints and what a tester can actually do from start to finish. Its findings went out the same evening. A returning tester can reuse their invite link. Only the operator account can admit people during the alpha. Telegram can no longer be bound to a tester's workspace, where its messages would have arrived at the operator's desk. The one-time agent key is readable when it is shown. Internal engineering pages are hidden from testers, dead links are gone, and the wording on Models, Memory, Connections and Agents was rewritten in plain terms. The same evening added the agent worker as its own service, which is what lets a Work task start at all.
21 October
Naming and wording. Alstead™ and Alstead Workshop™ now carry a trademark line on the sign-in page and in the footer, and the Workshop page is titled Alstead Workshop. Connections no longer tells a workspace that Telegram is unavailable while it is still checking. Needs you now says what Allow actually does: it adds that one missing permission to the agent from then on, where the page used to say each approval covered a single request. Two display faults went with it — rows in Work's "Waiting on you" list that wrapped one word per line, and a check on the Models page that threw a browser error.
22 October: scheduling and restarts
The unattended schedule now runs once per interval however many copies of the web process are running, held by a lock in Postgres rather than by there happening to be only one process. Its timer starts when the web process boots; before this it only started on the first request that loaded the operator workspace, so a restart with no traffic left nothing ticking at all. A pulse now has a hard timeout, so one hung tool call cannot stop scheduling everywhere. There is a public readiness endpoint at /api/health/ready, which answers 503 when Postgres is gone. And the container passes a shutdown signal through to the server, so a redeploy lets requests already in flight finish instead of cutting them off.
22 October: the two agent-key bugs
An independent code review of the key controls found two faults. Both were ours, and both were in the part of Alstead whose whole job is to hold an agent back.
- Rotating a paused agent's key handed that agent a working key. Pause was meant to hold; rotation quietly undid it.
- A call already in flight could undo a Pause or Retire that landed while it ran. Recording the key's last use wrote the whole key record back, including the state the call had read before the change.
Both were fixed and deployed the same day, 22 October. Three narrower changes came with the fix: a saved key record can no longer clear a revocation once it is set, rotating a paused agent's key now leaves the new key paused until Resume, and an Allow on a key that was retired or rotated between the request and the grant is refused rather than marked approved.
22 October: a renewal bug, found before it could matter
A re-check of payments found that a paying owner would have dropped to Free at every renewal. When Stripe moves a subscription into its next period, the new invoice sits as a draft for about an hour, and Alstead's access check only treated a past-due subscription as still paid, so that window read as unpaid. It was fixed in release 20261022p5, deployed on 23 October. Nobody was affected, because billing runs in test mode only and no plan limit is enforced, so nothing has ever been charged for a plan. That is not a setting waiting to be turned on, either: the billing mode has no live value to take, and every Stripe record is validated as test mode.
Refunds, disputes and failed renewals were re-checked at the same time and behave as intended. A refund never cancels a subscription. A dispute suspends access and stops collection until an administrator releases it. A failed renewal keeps access for three days from the end of the last paid month.
22 October: the work in release 20261022p5
The same review led to four more changes. They were ready on 22 October and were deployed on 23 October. The database itself now rejects any UPDATE, DELETE or TRUNCATE on a ledger row, for every caller including Alstead's own, with no path in Alstead's code to lift it. A call from a paused, retired or expired key is recorded before it is refused, with the key's prefix and the reason and never the bearer. A failed tool call in the computer, sandbox, models, vault, connectors, MCP, routines and finance families is recorded rather than passed over. And forgetting a memory now withholds its text from older versions of the profile too, so restoring an old version no longer un-forgets anything.
Alongside those: Alstead accepts the pairing link the Workshop desktop app copies, the service worker no longer answers a request meant for another computer with Alstead's own cached page, creating a routine is refused outside the operator workspace for now, and nine lines on the landing page were corrected against what a tester actually sees.
22 and 23 October: four more, and a correction to our own launch films
Your own Anthropic, Gemini or xAI key can now start a task. It always could, underneath — the request shape, the auth header and the decoder for each of those providers have been in the runtime for weeks, and the policy worker never cared which one it was. The limit was one line in the task form, which matched only OpenAI, so a tester with an Anthropic key saw no ready agents and no eligible budget and was never offered the form at all. Opening it exposed a related fault worth naming: xAI's endpoint was pinned only at the moment of the request, not at registration, so you could register it against any host, see it marked ready, and have every run die later. It is pinned at registration now. This page's own front page said the narrower thing and is corrected in the same release: a Work run takes your OpenAI, Anthropic, Gemini, xAI or OpenAI-compatible key, a local model is refused, and none of them has been verified against a live provider yet, OpenAI included — which was true before today too, and the old wording implied otherwise.
A task's cost is now readable per run, on your own keys, and a spending cap can be set per agent over a rolling window rather than per run. No second ledger was added for it: the figures are read back from the run records that already exist.
Alstead can now run a code sandbox in its own container instead of renting one. It ships switched off and the feature itself is still barred, so nothing about it is live; it is here so it is in place. Its one test against a real container has never been run, because the machine that built this release has no container daemon. That is the honest status of it.
And a fault in our own work, found by reading every frame: the launch film and the ten-second teaser both show a button reading “Allow this one action”. Allow does not do that. It adds the missing permission to that agent's key from then on, and it covers the whole tool family. The landing page said the wrong thing too and was corrected on 22 October; the films were cut the day before that review and nobody went back to them. They are withdrawn until they are re-cut. An older set of promotional films from September, which we had stopped using, turned out to carry more of the same and is withdrawn for good.
What is not true yet
No real Work run has completed in production. Bounded Work runs with a budget and a receipt are built and tested, but not verified live, and the same goes for allowing a blocked action from Needs you, restoring an earlier profile version, binding a model to an agent, and connection grants. There is no live billing: nothing is charged and no limit is enforced. Routines run for the operator but are not open to testers. Hosted sandboxes, cloud computers, hired agents using a computer or browser for you, and agents messaging on your behalf are not in this alpha. Anything that uses a model needs your own API key, and your provider bills you directly.
Where Alstead stands is the full list, and it carries its own date.
The Log is published by ASV Labs with each Alstead release, and once a week on Friday. If an entry is wrong, tell us and the correction goes up as its own entry.