Most AI agents have memory you can't audit.
Where did a fact come from? Who may see it? Was it altered?
Statewave answers all three:
- policies & sensitivity labels
- tamper-evident audit receipts
- full source traceability
Open source, Apache 2.0.
https://t.co/MlrAHiRQfd
Still no chat UI, and I'm increasingly happy about that.
A beautiful chatbot answering "Open Settings." when you ask how to rotate an API key is still just a very expensive tooltip.
Day 5: https://t.co/od6N7lIKmB
Next: can it finish the task without new authority?
Then it called "Open Clients." actionable guidance.
Narrator: it was not actionable guidance.
Two rules out of that day:
Correct language is not the same as complete guidance.
Every dropped verified action needs a reason.
The metrics made the bug obvious:
missing_workflow 5 → 16
actionability 1.24 → 1.14
10 of our 14 low scorers had one root cause: the workflow pointed at feature:<id>, the compiler expected a graph node, couldn't classify it, and quietly dropped the action.
Overall gate: median 1 of 3. Useful outputs 33%.
Because we'd taught it to speak, and it kept stopping halfway.
Rotate API key? "Open Settings."
Delete client? "Open Client Detail."
Export CSV? "Open Clients."
Perfectly readable English. Almost impressively unhelpful.
The capability split also moved. Measured again after the language fix: 2.00 for features with a verified capability, 1.07 for those without.
Yesterday's "barely a difference" was bad presentation hiding a real signal.
What we added was Guidance Compilation, a layer in between:
What the app does → What we should tell the user → How we should say it
First time two features scored a full 3/3. First time one scored 0: nothing verified to say, and it produced a title and a question anyway.
Same caveat as the other days: one model, one fixture, and the language and usefulness scores come from a separate model against a fixed rubric. Not from people.
Statewave Guide — Day 5: we taught it to speak. Then realized it still doesn't finish the job.
Too technical: 14 → 0.
Natural-language quality: 1.14 → 1.95 of 2.
Malformed identifier soup: gone.
And the thing still failed its usefulness gate. 🧵
Technically correct data structures do not automatically know how to talk to humans.
Shocking discovery for software developers, I know.
Day 4 in full: https://t.co/cQi4XjVoH0
Next: can we turn verified truth into human guidance without inventing anything new?
So the stack gained a layer:
Product Model — what do we know?
Guidance Compiler — what is worth telling the user?
Renderer — how should we say it?
No verification rule loosened. No new authority for the model.
Another feature had everything: POST endpoint, create permission, submit path, button. All verified.
Our renderer produced:
"You can create a new invoices create form and submit the invoices create form form…"
Technically grounded. Linguistically deceased.
The smoking gun: ten features showed users this sentence.
"No capability, route or permission has been verified for this feature."
All ten were rated too technical. 10/10.
That's not product copy. That's a debugger having an existential crisis in front of the customer.
We assumed the problem was missing capabilities. The data disagreed.
Features with a verified capability scored 1.43. Features without one: 1.14.
Barely a difference — bad presentation hiding a real signal. A later round, after the language fix, split the same groups 2.00 to 1.07.
Median usefulness: 1 out of 3.
Rated genuinely useful: 24%.
Nothing dangerously wrong. Nothing completely useless.
Worse, in a very software kind of way: almost everything was mediocre.
Two caveats, because they decide what these numbers are worth.
One model, one fixture: anthropic-opus-5 against an app we wrote ourselves.
And the usefulness scores come from a second model, GPT-5.6 Sol, against a fixed rubric. Not self-scoring. Also not a human review.
Statewave Guide — Day 4: we passed the safety test, then failed the product test.
Wrong-feature claims: 0.
Unsupported claims: 0.
Model restraint: 30/30.
Verified claim yield: 95%.
Then we asked whether any of it helps a human. 🧵
Yield went from 20% to 95%. Wrong-feature claims to 0. Restraint 30/30.
What didn't move: 45 of 63 features still have no verified capability. Safer, not fuller.
Day 3 in full: https://t.co/KtRUk401bi
Next: does any of this actually help a human?
We were also asking the model to do too much: find the evidence, choose the claim, the action, the subject, the relationships, then explain it.
The graph already knows most of that. So:
Model → invent claim → Verifier
became
Graph → claim opportunities → Model adds meaning → Verifier
A graph is a neighbourhood. Sibling components, routes and services sit next to each other, and any true fact from next door is still true — and useless.
So a claim now also has to prove it belongs to the feature being explained.
The verifier answered "is this supported by evidence?"
It never answered "does this evidence belong to THIS feature?"
Different class of error. Today's rule:
Truth is not enough. Context owns truth.