Use Decision::Model::Batch in os-vault judge.rb and os-me; remove the second retry loop #1711
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#1711
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
plugins/os-vault/eval/graph-extraction/bin/judge.rb:4-17wrapsclient.askin its own retry loop:rescue StandardError, 6 retries,sleep([2**tries, 30].min). The transport below decision-model (RubyLLM 2.1.1 through llm-stack) already makes 4 attempts for 429, 5xx, 529, and timeouts. Thus one row can cause up to 28 HTTP attempts. The loop also retries bad input (Decision::Model::InputError), which cannot succeed.judge.rbalso holds its own thread pool and dollar limit.plugins/os-me/lib/os_me/wrong_cost/assessor.rband os-meLeverRunhold their own loop or worker pool over many texts.Decision::Model::Batch(branchticket-25, not merged at the time of filing). It asks one question list of many named texts, one request for each text, and returns rows, failures with a kind (input,service,fatal), the texts not attempted, and run totals. It has no retry loop: the transport owns retries. It stops after 3 service failures in sequence and at the first fatal failure./home/jared/dev/house-explore-replay/pilot10/scorer-batched/lib/explore_scorer/jev.rb(ExploreScorer::Jev), outside cc-os.Approach
Not decided here; the owner of each plugin decides. What decision-model offers:
Decision::Model::Batch.new(client, questions).run(name => text); seedocs/design/batch.mdin decision-model.Batchruns texts in sequence and has no thread pool and no dollar limit; a caller that needs them keeps them.Required work: none beyond the acceptance criteria.
Acceptance criteria
judge.rbdoes not retry a request that the transport already retried, and it does not retry an input error.Decision::Model::Batchor records why it does not.Origin
Session: 6098efae-bfd3-433e-9752-524dfeb59c5c
Transcript: /home/jared/.claude/projects/-home-jared-dev-ruby-gems-decision-model--claude-worktrees-ticket-25/6098efae-bfd3-433e-9752-524dfeb59c5c
Where: plugins/os-vault/eval/graph-extraction/bin/judge.rb
Discoverer: decision-model, session 6098efae-bfd3-433e-9752-524dfeb59c5c, 2026-11-12. A second retry loop and a thread pool wrap decision-model calls in cc-os plugins.
Resolution
Done: Not built. Closed after the ticket-skeptic gate: VERDICT: DROP, failed the need-to-exist test. The live run of Decision::Model::Batch showed that Batch has no pacing and cannot replace the loop of a caller, so the adoption part has no stated need.
Evidence: ticket-skeptic verdict in decision-model session 6098efae-bfd3-433e-9752-524dfeb59c5c on 2026-11-12. This ticket was filed by an agent with --user-approved, and Jared did not approve it; the gate it skipped is now run. Ruling R6 in decision-model docs/decisions/rulings.tsv (ruled_by predict, confidence 72).
Follow-ups: none. The remaining real fault is the second retry loop in plugins/os-vault/eval/graph-extraction/bin/judge.rb:4-17 (rescue StandardError, 6 retries, on top of 4 transport attempts); the skeptic ruled that it is a small deletion for the owner of that script, not a ticket. Dropped.