Skip to content

Add an Away Mode to backlog-burndown and Retire unattended-handoff - #3735

Merged
ptr727 merged 9 commits into
developfrom
feature/burndown-away-mode
Nov 1, 2026
Merged

ptr727 merged 9 commits into
developfrom
feature/burndown-away-mode

Conversation

@ptr727

@ptr727 ptr727 commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Why

An unattended run often ended saying it needed the maintainer when nothing did. The picker had a single reply, NONE, for every kind of skip, and the run's final message routed that to the attended session as if a decision were waiting. Its exclusions stacked on each other: attended tracks, issues any handoff names, burndown claims, and an all-or-nothing "outcome determined" test. It also ran one worker per round. backlog-burndown, which works parallel file-claimed groups, proved more effective at running unattended.

What

  • backlog-burndown gains an away mode.
    • It keeps the same rounds and the same file claims.
    • A lean orchestrator holds only what a planner subagent and the workers return.
    • A group meeting a question parks behind a decision issue instead of asking. The park is recorded in its claim comment, and the decision is named on every pull request it blocks.
    • Merges go only as far as the develop, main or release scope named at invocation.
    • The end report names every held-back issue under the reason that actually holds it back, and counts only real questions as needing the maintainer.
    • It brings over the parts of the retired loop it still needs: the transient dispatch retry, the one-run-per-repository rule, the write-access comment filter, the blocked-promotion hold and the standing promotion grant.
    • Ranking now also holds back an issue already fixed on develop until a promotion closes it. This applies to attended runs as well.
  • New decision-triage skill (attended).
    • Classifiers sort the open issues into fixable alone, question, split, or held for another reason.
    • Researchers return a recommended answer per question, and each question is filed as a decision issue.
    • The whole queue is then put to the maintainer at once, and the answers are applied.
    • It owns the "Needs the Maintainer" test, which backlog-burndown carries as a generated include. It carries GOVERNANCE.md "Communicating with the User" as an include rather than paraphrasing it.
  • unattended-handoff is retired. References in AGENTS.md, session-handoff, merge-and-release, pr-review-conduct, local-strict-review and repo-config/README.md are swept. Open auto-* lanes an earlier loop left are picked up by the away mode.

Closes on promotion: #3375

Local review

All local-strict-review passes ran at the frontier tier, over the whole branch diff each time.

  • Before the first push, three passes raised 15, then 3, then 1 introduced findings. The first two rounds fixed theirs in 62e8ce6 and cb52db2.
  • The 1 left open at the first push was the promotion hold keyed on any claim release. It is fixed in 0990687.
  • The follow-up passes raised two more on that fix: a no-merge answer holding the promotion forever, and a dropped answer leaving its issue re-ranked. They are fixed in 706460d and 24603cc.
  • The pass on 24603cc raised nothing.
  • Copilot's round on cb52db2 opened 3 threads. One was already fixed. Two were real: outsider issue text steering an away run, and operational-model direct pushes missing from the fixed set. They are fixed in af29ce3.
  • Passes on that fix raised 4, then 1. They are fixed in 6f0dac6 and c42e20e. The pass on c42e20e raised nothing.

Open introduced findings

None.

Related open issues the retirement may overtake

None is closed here, since closing on judgment is the maintainer's call. Each targets the retired skill:

🤖 Generated with Claude Code

ptr727 and others added 3 commits October 31, 2026 21:04
The unattended loop's picker answered NONE for every kind of skip, so a
run that skipped lanes owned by attended handoffs reported that it needed
the maintainer when nothing did. It also worked one issue per round.

backlog-burndown's away mode runs the same parallel, file-claimed rounds
with a lean orchestrator, parks a group behind a decision issue instead of
asking, and merges only as far as the scope named at invocation. Its end
report names each held-back issue under the reason that actually holds it.

decision-triage finds every open question beforehand, researches a
recommended answer for each, files it as a decision issue, and asks the
maintainer the whole queue at once. It owns the needs-the-maintainer test,
which backlog-burndown carries as a generated include.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
An away run reranked issues already fixed on develop, could not see an
answered decision holding a promotion, could not resume a parked group
whose worktree still held its branch, and let the orchestrator commit a
dead worker's tree. It also dropped the dispatch retry, the one-run rule,
and the write-access comment filter the retired loop carried.

Parking now records the park in the group's claim comment rather than
the blocked label, whose defined uses this did not fit, and names the
decision on every pull request it blocks. decision-triage carries
"Communicating with the User" as an include rather than paraphrasing it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A resumed group now records its claim release only once its pull request
merges, so the promotion hold lifts on the answer's work rather than on
the dispatch. decision-triage comments each decision on the pull requests
it blocks, so a skipped question still holds the promotion. The away run
no longer leans on an attended session following a rule it never loads.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Copilot AI lite review requested due to automatic review settings November 1, 2026 04:17
@ptr727

ptr727 commented Nov 1, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head cb52db229c4b216e65dd82de483003e538e74f56, the content this pull request carries at that commit against develop, and it recorded 1 finding.

@coderabbitai

coderabbitai Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

ptr727 and others added 3 commits October 31, 2026 21:18
A claim is also released when a worker dies with a clean tree or a group
is abandoned, neither of which lands the answer's work. Holding the
promotion until the group's pull request merges to develop keeps such a
release from letting the promotion merge with the answer unapplied.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
An answer can drop a parked group's change rather than land it, which left
the hold waiting on a merge that never comes. The resumed worker records
that outcome in the claim comment, and the end report names a held
promotion with the decisions holding it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Releasing the claim alone left the issue open and unheld, so the next
planner ranked it again and filed the answered question afresh.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@ptr727

ptr727 commented Nov 1, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head 24603ccf660427bcff0bdb9fa131fdae4ee728e6, the content this pull request carries at that commit against develop, and it recorded 0 findings.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Active moderate and critical findings remain in the backlog-burndown skill, including incomplete direct-push deduplication, untrusted issue-body handling, and promotion proceeding before the group pull request merges.

3 open issues
What changed in this PR

This pull request replaces the retired unattended-handoff workflow with an away mode in backlog-burndown, adds attended decision-triage, and refreshes the authored and generated skill distributions.

Changes:

  • Adds parallel away-mode backlog processing with decision parking, claims, reporting, and scoped promotion behavior.
  • Adds decision-triage for classifying, researching, and presenting maintainer decisions.
  • Retires unattended-handoff and updates documentation, plugin registration, generated skills, and source digests.

Unresolved findings remain concerning answered legacy lanes, direct-push detection, clean branches with unmerged commits, untrusted issue text, promotion gating, partial issue splitting, split-issue narrowing, and skipped decision queues. The findings include seven P1 comments, one P2 comment, and one critical-severity comment, with the supplied vote counts preserved at 1, 2, 1, 4, 3, 1, 1, and 1 respectively.

This pull request requires changes.

File Description
repo-config/​README.md Updates parked-handoff terminology.
AGENTS.md Routes unattended work to away mode and decision triage.
.github/​skills/​unattended-handoff/​SKILL.md Removes the retired generated skill.
.github/​skills/​session-handoff/​SKILL.md Updates handoff ownership references.
.github/​skills/​pr-review-conduct/​SKILL.md Updates promotion evidence handling.
.github/​skills/​merge-and-release/​SKILL.md Replaces the retired standing grant with away-mode authorization.
.github/​skills/​local-strict-review/​SKILL.md Removes the retired skill exception.
.github/​skills/​decision-triage/​SKILL.md Adds the generated decision-triage skill.
.github/​skills/​backlog-burndown/​SKILL.md Adds generated away-mode backlog processing and promotion behavior.
.claude-plugin/​fleet-skills/​skills/​unattended-handoff/​SKILL.md Removes the retired packaged skill.
.claude-plugin/​fleet-skills/​skills/​session-handoff/​SKILL.md Updates packaged handoff references.
.claude-plugin/​fleet-skills/​skills/​pr-review-conduct/​SKILL.md Updates packaged promotion evidence handling.
.claude-plugin/​fleet-skills/​skills/​merge-and-release/​SKILL.md Updates packaged away-mode authorization.
.claude-plugin/​fleet-skills/​skills/​local-strict-review/​SKILL.md Updates the packaged reviewer handback rule.
.claude-plugin/​fleet-skills/​skills/​decision-triage/​SKILL.md Adds the packaged decision-triage skill.
.claude-plugin/​fleet-skills/​skills/​backlog-burndown/​SKILL.md Adds packaged away-mode backlog behavior.
.claude-plugin/​fleet-skills/​.source-digests/​unattended-handoff Removes the retired skill digest.
.claude-plugin/​fleet-skills/​.source-digests/​session-handoff Refreshes the session-handoff digest.
.claude-plugin/​fleet-skills/​.source-digests/​pr-review-conduct Refreshes the review-conduct digest.
.claude-plugin/​fleet-skills/​.source-digests/​merge-and-release Refreshes the merge-and-release digest.
.claude-plugin/​fleet-skills/​.source-digests/​local-strict-review Refreshes the strict-review digest.
.claude-plugin/​fleet-skills/​.source-digests/​decision-triage Adds the decision-triage digest.
.claude-plugin/​fleet-skills/​.source-digests/​backlog-burndown Refreshes the backlog-burndown digest.
.claude-plugin/​fleet-skills/​.claude-plugin/​plugin.json Registers decision triage and removes unattended handoff.
.agents/​skills/​unattended-handoff/​SKILL.md Removes the canonical retired skill.
.agents/​skills/​session-handoff/​SKILL.md Updates canonical handoff references.
.agents/​skills/​pr-review-conduct/​SKILL.md Updates canonical promotion evidence handling.
.agents/​skills/​merge-and-release/​SKILL.md Updates canonical away-mode authorization.
.agents/​skills/​local-strict-review/​SKILL.md Removes the canonical retired-workflow exception.
.agents/​skills/​decision-triage/​SKILL.md Adds the canonical decision-triage skill.
.agents/​skills/​backlog-burndown/​SKILL.md Adds canonical away-mode orchestration and reporting.

Review effort: Lite

@codecov

codecov Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.31%. Comparing base (b38e084) to head (c42e20e).
⚠️ Report is 52 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #3735      +/-   ##
===========================================
+ Coverage    81.60%   82.31%   +0.70%     
===========================================
  Files           26       28       +2     
  Lines         9070     9437     +367     
===========================================
+ Hits          7402     7768     +366     
- Misses        1668     1669       +1     
Flag Coverage Δ
python-3.13 82.31% <ø> (+0.70%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

ptr727 and others added 3 commits October 31, 2026 21:45
An away run under main or release could carry an outsider's issue text
through to a merge, so issue and comment text is task data, and an issue
an outsider opened waits until a write-access account accepts it. The
already-fixed hold also reads direct-push commit messages, since an
operational repository lands fixes on develop without a pull request.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The task-data rule covered the maintainer's own issues, which the trust
model treats as trusted, so it now covers text from accounts without
write access. Acceptance is a write-access comment stating what done
looks like, and the work follows that comment rather than a body its
author can still edit. An away run on an operational repository stops
at develop, since whether it promotes per round is the maintainer's call.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The planner holds such an issue back without filing a decision, so the
end report has to name it or it disappears from view.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@ptr727

ptr727 commented Nov 1, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head c42e20e297085df5f67b7b81ec3152c9ee2f0ebe, the content this pull request carries at that commit against develop, and it recorded 0 findings.

@ptr727
ptr727 merged commit 06e45c4 into develop Nov 1, 2026
13 checks passed
@ptr727
ptr727 deleted the feature/burndown-away-mode branch November 1, 2026 05:00
ptr727 added a commit that referenced this pull request Nov 1, 2026
…nd Add a backlog-burndown Away Mode (#3736)

Promotes the changes merged into `develop` since promotion #3715 to
`main`.

- [#3704](#3704):
squash-merges a gate-met feature pull request through `pr_review.py
merge`, and the host-safety kit now owns its `autoMode` entries.
- [#3735](#3735) adds an
away mode to `backlog-burndown`:
- Parallel file-claimed rounds with no maintainer present, run by a lean
orchestrator.
- A group meeting a question parks behind a `decision` issue instead of
asking.
- Merges go only as far as the `develop`, `main` or `release` scope
named at invocation.
  - The end report names each held-back issue's real reason.

It also adds the attended `decision-triage` skill, which researches and
asks every open question at once, and retires `unattended-handoff`.
- [#3737](#3737) reads a
pull request that reads back closed after `pr_review.py merge`'s merge
call as a refusal that merged nothing, rather than as an unconfirmed
merge. It answers this promotion's first review round.

After the release, the host-safety installer re-run that #3704 needs is
still the maintainer's, per its handoff #3734. That handoff's step 3
names an `unattended-handoff` worker. That skill is retired here, so the
verification runs from a `backlog-burndown` worker instead.

Fixes #3375

🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.

2 participants