Skip to content

thread-briefs: ask the summarizer whether a thread is finished - #9

Closed
trotterdylan wants to merge 1 commit into
mainfrom
bb/i-m-noticing-that-thread-briefs-are-almost-never-thr_75wi9398s8
Closed

trotterdylan wants to merge 1 commit into
mainfrom
bb/i-m-noticing-that-thread-briefs-are-almost-never-thr_75wi9398s8

Conversation

@trotterdylan

Copy link
Copy Markdown
Collaborator

Problem

Finished threads almost never read as Done. Status derives done only when nextStep and blockedOn are both empty, and nextStep is asked for as "the single most concrete next action". A model asked for one finds one: nearly every agent turn that finishes something signs off with a hand-over ("try it out", "let me know if anything looks off", "want me to also…?"). That sentence is concrete, addressed to the user, and would not happen on its own, so it passed the owed-action test to the letter, and a thread whose work had entirely landed sat in Waiting on you until someone pinned it.

Change

All under plugins/thread-briefs:

  • Prompt asks a direct boolean finished, placed before nextStep so the verdict is committed before the step is written, with the bar set at the state of the work rather than the last message. New rules: a hand-over sign-off is not an owed action; an offer of follow-up work nobody took up belongs in currentState; the previous brief's step is something to re-test, not carry forward.
  • Parser gains normalizeFinished and reconcileNextStep. finished: true clears whatever nextStep came back beside it, so the thread derives done and reconcileStage reads implementation as review. A named blockedOn overrules it, so a blocked thread still never reads as done. A reply without the key behaves exactly as before.
  • Transcript labels the fed-back previous brief as something to re-test, since feeding it back is what made stale steps sticky.
  • Docs (README and SKILL.md) record the new meaning: done is "the agent has nothing left to do and is waiting on nobody", not "nobody will ever touch this again". If the result turns out broken, the next turn is activity and the next brief reopens the thread.

Verification

Check Result
tsc --noEmit clean
vitest run 404 passed
bb plugin build toolchain download fails in the sandbox, unrelated to this change

Not exercised against the live summarizer (the API key is server-side), so the first few summaries after rollout are worth a glance.

Rollout note

Per .bb/AGENTS.md, merging restarts the bb-dylan server within about ten minutes. Existing briefs do not update until each thread has new activity or Re-summarize is pressed.

🤖 Generated with Claude Code

Finished threads almost never read as done. The status derivation calls a
brief done when nextStep and blockedOn are both empty, and nextStep is asked
for as "the single most concrete next action" — a model asked for one finds
one. Nearly every agent turn that finishes something ends by handing it over
("try it out", "let me know if anything looks off", "want me to also…?"), and
that sentence is concrete, addressed to the user and would not happen on its
own, so it passed the owed-action test to the letter. A thread whose work had
entirely landed sat in Waiting on you until someone pinned it.

The prompt now asks a direct boolean, "finished", placed before nextStep so
the verdict is committed before the step is written, with the bar set at the
state of the work rather than the last message. A new rule names the hand-over
pattern as not owing an action, and another says an offer of further work
nobody took up is an idea for currentState, not a nextStep. The previous
brief's nextStep is labelled as something to re-test rather than carry
forward, since feeding it back is what made a stale step sticky.

The parser makes the verdict stick: finished:true clears whatever nextStep
came back beside it, so the thread derives done and reconcileStage reads
implementation as review. blockedOn overrules it the other way — a named
blocker is the higher bar and a blocked thread never reads as done. A reply
without the key falls back to the old reading of nextStep alone, so a model
that ignores it changes nothing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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