Skip to content

calibrate salience, and stop scrolling an unchanging room - #16

Merged
jayzuccarelli merged 1 commit into
mainfrom
jayzuccarelli/calibrate-salience-and-quiet-the-log
Jul 22, 2026
Merged

calibrate salience, and stop scrolling an unchanging room#16
jayzuccarelli merged 1 commit into
mainfrom
jayzuccarelli/calibrate-salience-and-quiet-the-log

Conversation

@jayzuccarelli

Copy link
Copy Markdown
Owner

From a real run, once the summaries were sentences instead of man:

[glance] sal=0.7  A man is sitting at a desk, appearing to be working on a computer.
[glance] sal=0.8  A man is sitting at a desk and appears to be typing on a computer.
[glance] sal=0.8  A man is sitting at a desk and appears to be working on a computer.
[glance] sal=0.7  A man is sitting at a desk, looking at a screen.

Forty lines of that. Every one accurate, every one 0.7-0.8.

The number had stopped meaning anything

A salience of 0.8 for a man sitting still is not a small error. Focus is handed
"this is interesting" for a scene where nothing has happened, and the one tick
that matters looks exactly like the other 3,599. The prompt described salience
as "how much this stands out as worth attention" and left the model to invent a
scale.

Anchors instead:

0.0-0.2 the room doing what it always does: working, reading, sitting, walking through
0.3-0.5 a change worth noting, not worth interrupting anyone over
0.6-0.8 something you'd mention to a person standing next to you
0.9-1.0 something wrong: a fall, smoke, a stranger

Someone at a desk is 0.1, including the first time you see them. Not being able
to tell what's happening is also 0.1 with a summary that says so, because
uncertainty was reading as interest. And it says out loud that if nearly every
glance lands above 0.5 the number has stopped working, since that's the failure
being fixed.

The log stops scrolling a scene that isn't changing

A quiet tick now overwrites the last quiet one. An hour of an empty room was
3,600 near-identical lines, which buries the few that meant something and, when a
screen is one of the sensors, feeds straight back in as its own input.

Escalations, Focus verdicts and errors still scroll: those are the record. Not a
terminal means it's a log someone reads later, so piping keeps every tick, now
always flushed. At ~1 Hz flushing costs nothing, and an agent that runs for hours
shouldn't lose its log to a block buffer when someone kills it.

Unmeasured, and saying so

Evals score Glance against labeled scenes with the configured backend, and this
box only has the stub, which ignores the prompt. So the salience change is
reasoned, not measured. python -m saccade.evals on a machine with a real Glance
model is the check that matters.

make check green: 191 passed, 7 skipped, ruff and mypy --strict clean.

🤖 Generated with Claude Code

A real run, once the summaries were sentences:

    [glance] sal=0.7  A man is sitting at a desk, appearing to be working.
    [glance] sal=0.8  A man is sitting at a desk and appears to be typing.
    [glance] sal=0.8  A man is sitting at a desk and appears to be working.

Forty lines of that, every one of them accurate, and every one 0.7-0.8. A number
that is 0.8 for a man sitting still has stopped carrying information: Focus is
handed "this is interesting" for a scene where nothing has happened, and the one
tick that matters looks exactly like the other 3,599.

So `salience` gets anchors rather than an adjective. Someone working, reading or
walking through is 0.1, including the first time. 0.9+ is something wrong. Not
being able to tell what's happening is 0.1 and a summary that says so, since
uncertainty was reading as interest. It says out loud that if nearly every
glance lands above 0.5 the number has stopped working, because that's the
failure this is fixing.

And the log stops scrolling a scene that isn't changing: a quiet tick overwrites
the last quiet one. Escalations, Focus verdicts and errors still scroll, because
those are the record. Not a terminal means it's a log someone reads later, so
piping keeps every tick, now always flushed: an agent that runs for hours
shouldn't lose it to a block buffer when someone kills it.

The salience change is unmeasured here: evals need a real Glance model and this
box has the stub. `python -m saccade.evals` on a machine with one is the check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jayzuccarelli, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9b85bde3-daf8-4d36-ae0e-a49fe881a86e

📥 Commits

Reviewing files that changed from the base of the PR and between 2fb9c17 and 4ec99f6.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • saccade/glance.py
  • saccade/loop.py
  • tests/test_loop.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jayzuccarelli/calibrate-salience-and-quiet-the-log

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jayzuccarelli
jayzuccarelli merged commit d361014 into main Jul 22, 2026
4 checks passed
@jayzuccarelli
jayzuccarelli deleted the jayzuccarelli/calibrate-salience-and-quiet-the-log branch July 22, 2026 19:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant