Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ new version heading in the same commit.

## [Unreleased]

## [0.281.5] — 2026-07-31
### Fixed
- **The approval-friction signal no longer divides by a denominator that isn't there.** v0.280.0 started
recording the `approved` count so friction could be a rate; per-pass entries written before that carry
rejections with **no denominator**, and `recentTally` summed them anyway — so a window of mostly-legacy
entries read as ~100% rejection. Live instapods was nagging every agent that "recent actions were
rejected at human approval" while its true 7-day rate was **5.4%** (35 approved / 2 rejected). Entries
lacking the denominator now contribute to neither side of the ratio (their budget/error signals still
count), so the signal stays quiet until real evidence exists rather than inventing it. Verified against
both live tenants' actual window shapes: the false instapods nag stops; genuine friction with a real
sample still fires.

## [0.281.4] — 2026-07-31
### Fixed
- **Bump `TOPICS_VERSION` to 3.** v0.281.3 tightened the topic extractor (opaque hex ids) without bumping
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "agent-os",
"version": "0.281.4",
"version": "0.281.5",
"description": "A generic, governed operating system for running autonomous agents safely across brands. Ships with a local web console.",
"license": "MIT",
"type": "commonjs",
Expand Down
10 changes: 8 additions & 2 deletions src/edge/dreaming.ts
Original file line number Diff line number Diff line change
Expand Up @@ -464,8 +464,14 @@ function recentTally(s: DreamState): { sessions: number; success: number; approv
for (const e of (s.recent ?? []).slice(0, RECENT_PASSES)) {
r.sessions += e.sessions || 0;
r.success += e.success || 0;
r.approved += e.approved || 0;
r.rejected += e.rejected || 0;
// Approval friction is a RATIO, so an entry that predates the `approved` denominator must contribute
// NEITHER side — counting its rejections against a missing denominator reads as 100% rejection. Live
// instapods computed 22% (and nagged every agent) while its true rate was 5.4%, because six of seven
// window entries were legacy. Skipping them means the signal stays quiet until real evidence exists.
if (e.approved !== undefined) {
r.approved += e.approved;
r.rejected += e.rejected || 0;
}
r.budgetStops += e.budgetStops || 0;
r.errors += e.errors || 0;
}
Expand Down
Loading