Skip to content

Improve decision-triage From Its First Full Run #3759

Closed

Description

@ptr727

Lessons from the first full decision-triage run on this repository (2026-11-01). It covered 156 open issues and asked 97 researched questions: 74 were put to the maintainer and 23 had already been answered by later changes. Items 1-5 are ready to work. Items 6 and 7 need a maintainer choice, stated below. That is why this issue carries decision.

Changes go through skill-lifecycle, with scripts/build_dist.py regenerating the distributions. backlog-burndown carries decision-triage's "Needs the Maintainer" as a generated include, so check it after any edit there.

Ready to Work

  1. Cluster research by default and show the cost up front. Step 3 sends one frontier researcher per question, which here meant about 97 runs. The run instead clustered five or six questions per researcher by topic, at roughly a third of the cost, with no loss of quality the maintainer noticed. Make topic clusters the default, and have step 3 state the research count and an estimated token cost before dispatching.
  2. Make the newest comments the evidence. The qodo_open Double-Counts and Never Clears the Open-Source Qodo App's Threaded Findings #2252 researcher recommended the design from the issue body. A later comment recorded the bot's own statement of how it behaves, which pointed to a different answer, and the maintainer had to correct the recommendation. The researcher brief should say three things:
    • read every comment, newest last;
    • a later maintainer or evidence comment outranks the body's design;
    • a tool's or bot's own statement of its behavior is evidence to weigh against the body.
  3. Give the classifier an OVERTAKEN line. 23 of the 97 questions (24%) came back from research as already answered: a retired skill (Add an Away Mode to backlog-burndown and Retire unattended-handoff #3735), a merged fix, a completed rollout, or a tracker whose children had closed. Each cost a frontier pass. Let the classifier return OVERTAKEN #n <what> after a cheap history check (git log on the named files, the state of child issues, a later decision comment). Also add a step that offers to close the overtaken issues that hold nothing else, since that offer was improvised in this run.
  4. Say in the brief that output is posted publicly, and fix the write bound.
    • Researcher output becomes a public issue comment, but the brief does not say so. Two researchers described the triaging machine's own environment (installed tool versions, a local uncommitted file) and had to be scrubbed by hand. The brief should say the output is posted publicly, and cite only the repository, its history, and GitHub state.
    • "Writes nothing" was broken by three researchers, who saved issue text to scratch files. The bound should allow a named scratch directory and forbid only repository and GitHub writes.
  5. Ask coupled questions together. Step 5's longest-waited order separated questions that settle each other, such as Make pr_review.py and Merge Gate Item 2 Agree on an Earlier-Head Copilot Refusal #3571 with Copilot Refuses a Pull Request Carrying Only Default-Excluded Files, and No Rule Covers It #2180, Read a Bare Push's Branch After an Earlier Branch Switch in the Same Command in the Write Guard #3729/Decide Whether Every Bare Push With an Undetermined Repository Fails Closed in the Write Guard #3730/Drop the Unused leading_cd and moved Parameters From the Write Guard's Bare-Push Reader #3723, and Declare Per-Environment Secrets and Variables Once and Check Them From the Hub #2070/Hand a Variable Set of Environment Values to a Hub Task's Hook Instead of Named Pairs #2174/Say Where the Deploy-Site Task Actually Requires the SSH Key #1801. Within the age order, put questions linked through a BLOCKS line or a shared file in the same prompt.

Needs a Maintainer Choice

  1. A machine-readable "deferred" state. Three answers were "not yet": Add safety hooks for opencode and codex #781, Generate the Qodo Settings Repository From the Hub So Fleet Rules Are Authored Once and Auditable #1464, Hand a Variable Set of Environment Values to a Hub Task's Hook Instead of Named Pairs #2174. Today that lives only in an answer comment, so a later classifier could read the issue as ready work. Options:
    • (recommended) Add a deferred label. decision-triage applies it on a "not yet" answer. backlog-burndown and the classifier skip it, and a later triage reports deferred issues by count.
    • Reuse blocked, with the comment naming the condition. This needs no new label, but it blurs "blocked on an issue" with "blocked on the maintainer's timing".
    • Keep comment-only and have the classifier brief read for it. Cheapest, and the least reliable.
  2. Whether a recorded approval clears the agent-safety hold. The maintainer approved eight edits under host-setup/agent-safety/ in this run (Validate the Interpreter the Agent-Safety Installer Writes Into settings.json #1172, Coding agents may claim co-author but never include session links #1264, A Parent Pinned to UTF-8 Spawning a Python Child Leaves the Child's Encoder on the Locale #1577, State the Session-Tree Bound and the Orphan Stop in Requirement 9 #2598, Nothing Checks That the Host CLAUDE.md Blocks Stay in Sync With Their Governance Sections #3601, Read a Push Option Attached to -o as Its Value in the Write Guard #3720, Drop the Unused leading_cd and moved Parameters From the Write Guard's Bare-Push Reader #3723, Read a Bare Push's Branch After an Earlier Branch Switch in the Same Command in the Write Guard #3729). "Needs the Maintainer" still holds every such edit, and backlog-burndown away mode reports them as needing the maintainer present, so they may just be parked again. Options:
    • (recommended) A recorded approval comment from an account with write access lets an attended run implement the change. Merging it still needs the maintainer present, since a human approves the diff, not just the design. Away mode keeps holding it.
    • The approval also clears away mode, with the merge held at the promotion.
    • Leave as is: every agent-safety edit needs the maintainer present from the start, whatever was approved earlier.

Done When

Items 1-5 are reflected in .agents/skills/decision-triage/SKILL.md and regenerated. Items 6 and 7 carry the maintainer's choice and are implemented in decision-triage, and in backlog-burndown where it is affected.

Activity

  1. added
    enhancementNew feature or request
    decisionA question waiting on the maintainer, alone or beside whatever else the issue carries
    on Nov 1, 2026
  2. ptr727 commented on Nov 1, 2026

    @ptr727
    OwnerAuthor

    Maintainer answers (2026-11-01):

    Item 6, option 1: add a deferred label. decision-triage applies it on a "not yet" answer, with the resume condition stated in the answer comment. backlog-burndown and the triage classifier skip it, and a later triage reports deferred issues by count. Implementation:

    Item 7, option 1: an approval comment on an issue, from an account with write access, lets an attended run implement and drive an edit under host-setup/agent-safety/. Merging still needs the maintainer present, since the maintainer approves the diff and not only the design. Away mode keeps holding every agent-safety edit. Write this into decision-triage "Needs the Maintainer" (and so backlog-burndown's generated include). It applies to the eight approvals recorded on 2026-11-01: #1172, #1264, #1577, #2598, #3601, #3720, #3723, and #3729 (with #3730).

    Items 1-7 are now all work.

  3. removed
    decisionA question waiting on the maintainer, alone or beside whatever else the issue carries
    on Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions