feat(#756): add split action to triage for bundled issues - #757
Conversation
Add a new "split" triage action that decomposes an issue bundling
multiple independent concerns into separate sub-issues. This addresses
the case where a single issue lists several unrelated tasks (e.g.,
multiple doc gaps or unrelated bug fixes) that should each be tracked,
triaged, and resolved independently.
Changes:
- Schema: add "split" to the action enum with a required sub_issues
array (minItems: 2) of {title, body} objects
- post-triage.sh: handle split by creating sub-issues in the source
repo, appending links to the comment, cleaning up labels, and
closing the original issue as completed
- agents/triage.md: add split action documentation with heuristics
for distinguishing bundled independent concerns from single
multi-faceted problems
- Tests: add 13 test cases covering sub-issue creation, comment
posting, label cleanup, closing, and error cases
Note: pre-commit could not run (network restrictions in sandbox).
The post-script runs an authoritative pre-commit check on the runner.
Closes #756
|
🤖 Review · Commit: |
|
/fs-fix this needs a functional test case |
|
🤖 Finished Fix · ✅ Success · Started 6:27 PM UTC · Completed 6:32 PM UTC Commit: |
Add a single test that exercises the complete split flow and verifies all outcomes in one run: sub-issue creation, comment with appended "Split into:" links, label cleanup (blocked, needs-info, ready-to-code, pr-open, triaged), issue closure, and operation ordering (creates before comment, comment before close). Addresses review feedback on #757
🔧 Fix agent — iteration 1 (human-triggered)Added a functional end-to-end test for the split triage action that verifies the complete flow in a single test run with 7 categories of assertions. Fixed (1):
Tests: passedNext steps:
|
|
🤖 Finished Review · ✅ Success · Started 6:34 PM UTC · Completed 6:49 PM UTC Commit: |
|
/fs-fix no, this needs a new functional test case in the |
|
🤖 Finished Fix · ✅ Success · Started 6:40 PM UTC · Completed 6:48 PM UTC Commit: |
Add eval/triage/cases/008-split-bundled-issues/ with an issue that bundles three independent maintenance items (wrong docstring, missing input validation, empty README) across different files. The triage agent should decompose this into standalone sub-issues via the split action. Addresses review feedback on #757
🔧 Fix agent — iteration 2 (human-triggered)Added eval case 008-split-bundled-issues to test the triage agent's split action. The case presents an issue with three independent concerns across different files — a textbook scenario for decomposition into sub-issues. Fixed (1):
Tests: passedNext steps:
|
ReviewFindingsMedium
Low
Previous runReviewFindingsMedium
Low
Next steps:
Previous run (2)ReviewFindingsMedium
Low
Labels: PR adds a new triage action (split) and modifies the triage agent pipeline Next steps:
Previous run (3)ReviewReason: stale-head The review agent reviewed commit |
|
/fs-review |
|
🤖 Finished Review · ✅ Success · Started 6:50 PM UTC · Completed 7:09 PM UTC Commit: |
|
/fs-fix this is missing docs updates in docs/triage.md |
|
🤖 Fix · Commit: |
|
/fs-fix actually, two things. this needs a docs update in agents/triage.md and this needs to respect the allowed remote repos config option (from config.yaml) - the |
|
🤖 Finished Fix · ✅ Success · Started 9:25 PM UTC · Completed 9:33 PM UTC Commit: |
Add optional `repo` field to split sub-issues so the triage agent can decompose bundled issues across repositories, governed by the existing `create_issues.allow_targets` config. Extract config reading and `is_target_allowed()` from the prerequisites handler to a shared location so both prerequisites and split use the same allowlist. - Schema: add optional `repo` to sub_issues items - post-triage.sh: read allow_targets before case statement, validate split sub-issue targets, report disallowed targets in comment - agents/triage.md: document cross-repo sub-issue capability - Tests: add mock yq, cross-repo split tests (allowed, disallowed, default-to-source); fixes pre-existing prerequisites test failure Addresses review feedback on #757
🔧 Fix agent — iteration 3 (human-triggered)Addressed both human-requested changes: (1) updated agents/triage.md docs for the split action's cross-repo capability, and (2) added create_issues.allow_targets support to the split handler in post-triage.sh. Extracted shared config reading and is_target_allowed() from prerequisites so both actions use the same allowlist. Added mock yq to tests, fixing both new cross-repo split tests and the pre-existing prerequisites-creates-allowed-issue test failure. Fixed (4):
Tests: passedNext steps:
|
|
🤖 Finished Review · ✅ Success · Started 9:34 PM UTC · Completed 9:50 PM UTC Commit: |
|
/fs-fix |
|
🤖 Finished Fix · ✅ Success · Started 9:02 PM UTC · Completed 9:09 PM UTC Commit: |
- Guard against all sub-issue creations failing: abort instead of closing the original issue with no replacements - Sanitize agent-controlled values in GHA ::warning:: annotations to prevent newline injection in workflow commands - Add valid-split and split-missing-sub-issues schema validation tests - Document split action behavior in docs/triage.md Addresses review feedback on #757
🔧 Fix agent — iteration 4 (human-triggered)Addressed 4 of 5 review findings. Added all-fail guard for split handler, sanitized GHA workflow command annotations, added schema validation tests (valid-split, split-missing-sub-issues), and documented split action in docs/triage.md. Disagreed with 1 finding (protected-path is informational, requires human approval). Fixed (4):
Disagreed (1):
Tests: passedNext steps:
|
|
🤖 Finished Review · ✅ Success · Started 9:10 PM UTC · Completed 9:27 PM UTC Commit: |
Superseded by updated review
|
🤖 Finished Retro · ✅ Success · Started 6:39 PM UTC · Completed 6:56 PM UTC Commit: |
Retro: PR #757 — Split triage actionTimelinePR #757 added a
AssessmentRework (4 iterations, 2 avoidable): Iterations 1-2 were avoidable and match the pattern in #588. The code agent modified Review quality (good): The review agent caught genuine issues: [medium] edge-case (closing issue when all sub-issue creations fail), [medium] stale-doc ( Token cost: ~10 agent runs total (1 code, 5 review including 1 cancelled, 4 fix including 1 cancelled). With #588 in place, this could have been ~6 runs. Existing issues with new evidence
Proposals filed
|
Add a single test that exercises the complete split flow and verifies all outcomes in one run: sub-issue creation, comment with appended "Split into:" links, label cleanup (blocked, needs-info, ready-to-code, pr-open, triaged), issue closure, and operation ordering (creates before comment, comment before close). Addresses review feedback on #757
Add eval/triage/cases/008-split-bundled-issues/ with an issue that bundles three independent maintenance items (wrong docstring, missing input validation, empty README) across different files. The triage agent should decompose this into standalone sub-issues via the split action. Addresses review feedback on #757
Add optional `repo` field to split sub-issues so the triage agent can decompose bundled issues across repositories, governed by the existing `create_issues.allow_targets` config. Extract config reading and `is_target_allowed()` from the prerequisites handler to a shared location so both prerequisites and split use the same allowlist. - Schema: add optional `repo` to sub_issues items - post-triage.sh: read allow_targets before case statement, validate split sub-issue targets, report disallowed targets in comment - agents/triage.md: document cross-repo sub-issue capability - Tests: add mock yq, cross-repo split tests (allowed, disallowed, default-to-source); fixes pre-existing prerequisites test failure Addresses review feedback on #757
- Guard against all sub-issue creations failing: abort instead of closing the original issue with no replacements - Sanitize agent-controlled values in GHA ::warning:: annotations to prevent newline injection in workflow commands - Add valid-split and split-missing-sub-issues schema validation tests - Document split action behavior in docs/triage.md Addresses review feedback on #757
…e action Add a single test that exercises the complete split flow and verifies all outcomes in one run: sub-issue creation, comment with appended "Split into:" links, label cleanup (blocked, needs-info, ready-to-code, pr-open, triaged), issue closure, and operation ordering (creates before comment, comment before close). Addresses review feedback on fullsend-ai#757
Add eval/triage/cases/008-split-bundled-issues/ with an issue that bundles three independent maintenance items (wrong docstring, missing input validation, empty README) across different files. The triage agent should decompose this into standalone sub-issues via the split action. Addresses review feedback on fullsend-ai#757
Add optional `repo` field to split sub-issues so the triage agent can decompose bundled issues across repositories, governed by the existing `create_issues.allow_targets` config. Extract config reading and `is_target_allowed()` from the prerequisites handler to a shared location so both prerequisites and split use the same allowlist. - Schema: add optional `repo` to sub_issues items - post-triage.sh: read allow_targets before case statement, validate split sub-issue targets, report disallowed targets in comment - agents/triage.md: document cross-repo sub-issue capability - Tests: add mock yq, cross-repo split tests (allowed, disallowed, default-to-source); fixes pre-existing prerequisites test failure Addresses review feedback on fullsend-ai#757
- Guard against all sub-issue creations failing: abort instead of closing the original issue with no replacements - Sanitize agent-controlled values in GHA ::warning:: annotations to prevent newline injection in workflow commands - Add valid-split and split-missing-sub-issues schema validation tests - Document split action behavior in docs/triage.md Addresses review feedback on fullsend-ai#757
Summary
Add a
splittriage action that decomposes bundled issues into independent sub-issues:schemas/triage-result.schema.json): New"split"action with asub_issuesarray (≥2 entries of{title, body})scripts/post-triage.sh): Creates sub-issues in the source repo, appends "Split into:" links to the comment, cleans up labels (blocked, needs-info, ready-to-code, pr-open), and closes the original as completedagents/triage.md): Heuristics for detecting bundled independent concerns (numbered lists of unrelated items, multiple components with no dependency) vs. single multi-faceted problems (steps toward one goal, dependency chains)This addresses the pattern where a single issue lists several unrelated tasks (e.g., fullsend-ai/fullsend#6076 had seven independent doc gaps). Without this action, triage either treats the whole bundle as one muddled unit or picks one item and lets the rest go unaddressed. The code agent then closes the issue after fixing one item, losing the remaining work (fullsend-ai/fullsend#1577).
Testing
scripts/post-triage-test.shcovering:scripts/validate-output-schema-test.shto includesub_issuesin the known-keys listprerequisites-creates-allowed-issue) fails due to missingyqin sandboxCloses #756
Post-script verification
agent/756-triage-split-action)6bdcab691824e871c406e224356a1eada612501a..HEAD)