Skip to content

feat(#756): add split action to triage for bundled issues - #757

Merged
ralphbean merged 5 commits into
mainfrom
agent/756-triage-split-action
Aug 13, 2026
Merged

feat(#756): add split action to triage for bundled issues#757
ralphbean merged 5 commits into
mainfrom
agent/756-triage-split-action

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Summary

Add a split triage action that decomposes bundled issues into independent sub-issues:

  • Schema (schemas/triage-result.schema.json): New "split" action with a sub_issues array (≥2 entries of {title, body})
  • Post-triage (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 completed
  • Triage prompt (agents/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

  • 13 new test cases in scripts/post-triage-test.sh covering:
    • Sub-issue creation in source repo
    • Comment posting and link appending
    • Label cleanup (blocked, needs-info, ready-to-code, pr-open, triaged)
    • Original issue closure with "completed" reason
    • Error cases: missing comment, fewer than 2 sub-issues
    • Multi-item (3+) split
  • Updated scripts/validate-output-schema-test.sh to include sub_issues in the known-keys list
  • All new tests pass; one pre-existing test (prerequisites-creates-allowed-issue) fails due to missing yq in sandbox

Closes #756

Post-script verification

  • Branch is not main/master (agent/756-triage-split-action)
  • Secret scan passed (gitleaks — 6bdcab691824e871c406e224356a1eada612501a..HEAD)
  • PR body secret scan passed (gitleaks — no-git)

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
@fullsend-ai-coder
fullsend-ai-coder Bot requested a review from a team as a code owner August 11, 2026 18:16
@fullsend-ai-coder fullsend-ai-coder Bot added the ready-for-review Triggers review agent dispatch label Aug 11, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 6:17 PM UTC · Ended 6:33 PM UTC

Commit: f272430 · View workflow run →

@ralphbean

Copy link
Copy Markdown
Member

/fs-fix this needs a functional test case

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 6:27 PM UTC · Completed 6:32 PM UTC

Commit: f272430 · View workflow run →

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
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 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):

  1. needs a functional test case: Added a functional end-to-end test (split-functional-end-to-end) that runs the split action once and verifies the complete flow: sub-issue creation (both issues), comment posting with appended 'Split into:' links containing mock URLs, label cleanup for all 5 stale labels (blocked, needs-info, ready-to-code, pr-open, triaged), original issue closure with 'completed' reason, and operation ordering (creates before comment, comment before close).

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 6:34 PM UTC · Completed 6:49 PM UTC

Commit: bcd6e07 · View workflow run →

@ralphbean

Copy link
Copy Markdown
Member

/fs-fix no, this needs a new functional test case in the eval/triage/ dir.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 6:40 PM UTC · Completed 6:48 PM UTC

Commit: bcd6e07 · View workflow run →

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
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 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):

  1. needs a new functional test case in eval/triage/ dir: Added eval/triage/cases/008-split-bundled-issues/ with input.yaml (issue bundling 3 independent maintenance items: wrong docstring, missing input validation, empty README), annotations.yaml (expected state: closed, forbidden labels, scoring rubric for the split action), and repo symlink to shared python-webapp fixture.

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review

Findings

Medium

Low

  • [GHA-workflow-command-injection] scripts/post-triage.sh — The split handler's ::warning:: annotation at the "Skipping sub-issue creation" path interpolates TARGET_REPO without sanitizing for GHA workflow command metacharacters (:: and newlines). TARGET_REPO originates from agent-controlled JSON (.sub_issues[].repo). The schema regex (^[a-zA-Z0-9._-]+/[a-zA-Z0-9._-]+$) blocks these characters under normal validation, but the agent may emit unvalidated JSON after 3 failed validation attempts. This mirrors the same unsanitized pattern in the existing prerequisites handler. Risk is low because ::set-env/::add-path are disabled on GHA runners by default.
    Remediation: Apply the same sanitization used for SAFE_TITLE: SAFE_TARGET="${TARGET_REPO//$'\n'/ }"; SAFE_TARGET="${SAFE_TARGET//::/-}" and use SAFE_TARGET in the ::warning:: and log echo lines.
Previous run

Review

Findings

Medium

  • [edge-case] scripts/post-triage.sh — The split handler closes the original issue even when all sub-issue creations fail. If every gh issue create call fails (API outage, rate limiting, permission issues), CREATED_URLS remains empty and the comment includes only the "Could not create automatically" section, yet the issue is still closed with reason completed — effectively losing the tracked work items with no successful sub-issues to replace them.
    Remediation: After the creation loop, guard against the all-fail case: if [[ -z "${CREATED_URLS}" ]] && [[ -n "${FAILED_CREATES}" ]]; then echo "ERROR: all sub-issue creations failed" >&2; exit 1; fi

  • [protected-path] agents/triage.md, scripts/post-triage.sh, scripts/post-triage-test.sh, scripts/validate-output-schema-test.sh — PR modifies files under protected paths (agents/, scripts/). The PR links to issue Triage agent should support splitting a single issue into multiple independent same-repo issues #756 and explains the rationale. Human approval is always required for protected-path changes regardless of context.

Low

  • [GHA-workflow-command-injection] scripts/post-triage.sh — The split handler's ::warning:: annotations interpolate agent-controlled values (SUB_TITLE, TARGET_REPO, CREATED_URL) without sanitizing GHA workflow command metacharacters. A crafted title containing newlines could inject additional command lines. This replicates the same unsanitized pattern in the existing prerequisites handler. Risk is low because agent output is schema-validated and ::set-env/::add-path are disabled by default.
    Remediation: Sanitize before interpolation: SUB_TITLE="${SUB_TITLE//$'\n'/ }"; SUB_TITLE="${SUB_TITLE//::/-}"

  • [missing-test] scripts/validate-output-schema-test.sh — No schema validation test for the split action. Every other action has valid-* and negative tests in this file. The split action is missing both a valid-split positive test and a split-missing-sub-issues negative test.

  • [stale-doc] docs/triage.md — The user-facing documentation does not mention the split action. The split action's behavior (create sub-issues, close original with reason completed) is undiscoverable from this documentation.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (2)

Review

Findings

Medium

  • [edge-case] scripts/post-triage.sh — The split handler closes the original issue even when all sub-issue creations fail. If every gh issue create call fails (API outage, rate limiting, permission issues), CREATED_URLS remains empty and the comment includes only the "Could not create automatically" section, yet the issue is still closed with reason completed — effectively losing the tracked work items. The prerequisites handler has an analogous gap but is less destructive because it keeps the issue open.
    Remediation: After the creation loop, guard against the all-fail case: if [[ -z "${CREATED_URLS}" ]] && [[ -n "${FAILED_CREATES}" ]]; then echo "ERROR: all sub-issue creations failed" >&2; exit 1; fi

  • [stale-doc] docs/triage.md:40 — The "Control labels" table documents all triage actions except split. Other terminal actions (duplicate, not-planned) are listed despite not applying unique labels. The split action's behavior (create sub-issues, close original with reason completed) is undiscoverable from this user-facing documentation.
    Remediation: Add an entry explaining that split creates separate sub-issues and closes the original issue.

  • [protected-path] agents/triage.md, scripts/post-triage.sh, scripts/post-triage-test.sh, scripts/validate-output-schema-test.sh — PR modifies files under protected paths (agents/, scripts/). The PR links to issue Triage agent should support splitting a single issue into multiple independent same-repo issues #756 and explains the rationale. Human approval is always required for protected-path changes regardless of context.

Low

  • [GHA-workflow-command-injection] scripts/post-triage.sh:521 — The ::warning:: annotation interpolates agent-controlled SUB_TITLE without sanitizing newlines. A title containing a literal newline produces multiple GHA workflow command lines (e.g., ::stop-commands:: could suppress subsequent annotations). This replicates the same unsanitized pattern in the existing prerequisites handler.
    Remediation: Sanitize before interpolation: SUB_TITLE="${SUB_TITLE//$'\n'/ }".

  • [missing-test] scripts/post-triage-test.sh — No test verifies that split uses a plain comment (gh issue comment) rather than a sticky comment (fullsend post-comment). Other actions like sufficient and in-progress have dedicated tests for their comment posting mechanism.


Labels: PR adds a new triage action (split) and modifies the triage agent pipeline


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (3)

Review

Reason: stale-head

The review agent reviewed commit bcd6e076be15e8b3f32f3461ff9d44912c69ce0d but the PR HEAD is now ccd5656b4c841c0afc3356a74c0c45f013e42269. This review was discarded to avoid approving unreviewed code.

@fullsend-ai-review

Copy link
Copy Markdown

/fs-review

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 6:50 PM UTC · Completed 7:09 PM UTC

Commit: ccd5656 · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added triage-agent enhancement New feature or request labels Aug 11, 2026
@ralphbean

Copy link
Copy Markdown
Member

/fs-fix this is missing docs updates in docs/triage.md

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Fix · ⚠️ Cancelled · Started 9:23 PM UTC · Ended 9:24 PM UTC

Commit: ccd5656 · View workflow run →

@ralphbean

Copy link
Copy Markdown
Member

/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 .create_issues.allow_targets one. It should be possible for this to split an issue into some on this repo and some other repo or org (governed by .create_issues.allow_targets).

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 9:25 PM UTC · Completed 9:33 PM UTC

Commit: ccd5656 · View workflow run →

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
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 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):

  1. docs update in agents/triage.md for cross-repo split (agents/triage.md): Added cross-repo sub-issues documentation: describes the optional repo field, allow_targets governance, and the fallback behavior when targets are disallowed. Updated the JSON example to show a cross-repo sub-issue.
  2. respect create_issues.allow_targets for split action (scripts/post-triage.sh): Extracted config reading and is_target_allowed() from the prerequisites handler to a shared location before the case statement. Updated the split handler to read the optional repo field per sub-issue (defaulting to source repo), validate against allow_targets, and report disallowed targets in a 'Could not create automatically' section with details blocks matching the prerequisites pattern.
  3. schema support for cross-repo sub-issues (schemas/triage-result.schema.json): Added optional repo field to sub_issues items with the same owner/name pattern validation used by prerequisites create entries.
  4. test coverage for cross-repo split and mock yq (scripts/post-triage-test.sh): Added mock yq to test setup (fixes pre-existing prerequisites test failure). Added three new tests: split-creates-allowed-cross-repo-issue, split-skips-disallowed-cross-repo-issue, and split-defaults-to-source-repo.

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 9:34 PM UTC · Completed 9:50 PM UTC

Commit: d672edc · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@ralphbean

Copy link
Copy Markdown
Member

/fs-fix

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 9:02 PM UTC · Completed 9:09 PM UTC

Commit: d672edc · View workflow run →

- 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
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 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):

  1. split handler closes original issue when all sub-issue creations fail (scripts/post-triage.sh): Added guard after the creation loop: if CREATED_URLS is empty and FAILED_CREATES is non-empty, abort with an error instead of closing the original issue with no replacements.
  2. GHA workflow command injection via unsanitized agent-controlled values (scripts/post-triage.sh): Sanitize SUB_TITLE and CREATED_URL before interpolation in ::warning:: annotations by replacing newlines with spaces and :: with - to prevent GHA workflow command injection.
  3. missing schema validation tests for split action (scripts/validate-output-schema-test.sh): Added valid-split positive test (split with 2 sub-issues passes validation) and split-missing-sub-issues negative test (split without sub_issues field fails validation).
  4. user-facing docs do not mention split action (docs/triage.md): Added paragraph documenting the split action behavior: sub-issue creation, cross-repo support, label cleanup, and issue closure with reason completed.

Disagreed (1):

  1. PR modifies files under protected paths (agents/, scripts/): This is an informational finding noting that human approval is required for protected-path changes. It is not an actionable code fix — the PR intentionally modifies these paths to implement the split feature per issue Triage agent should support splitting a single issue into multiple independent same-repo issues #756.

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 12, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 9:10 PM UTC · Completed 9:27 PM UTC

Commit: 1869bf8 · View workflow run →

@fullsend-ai-review
fullsend-ai-review Bot dismissed stale reviews from themself August 12, 2026 21:27

Superseded by updated review

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

See the review comment for full details.

Comment thread scripts/post-triage.sh
@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 12, 2026
@ralphbean
ralphbean enabled auto-merge August 13, 2026 18:22
@ralphbean
ralphbean added this pull request to the merge queue Aug 13, 2026
Merged via the queue into main with commit d7a95c2 Aug 13, 2026
20 checks passed
@ralphbean
ralphbean deleted the agent/756-triage-split-action branch August 13, 2026 18:36
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 13, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 6:39 PM UTC · Completed 6:56 PM UTC

Commit: 1869bf8 · View workflow run →

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #757 — Split triage action

Timeline

PR #757 added a split triage action for decomposing bundled issues into independent sub-issues. The code agent (run 31520964194) produced a solid initial implementation covering the schema, post-triage.sh handler, and agents/triage.md heuristics. The PR went through 4 fix iterations over ~3 days before merging:

Iteration Trigger What happened
1 Human: "needs a functional test case" Fix agent added a unit test in post-triage-test.sh (misinterpreted "functional test case")
2 Human: "no, this needs a new functional test case in the eval/triage/ dir" Fix agent added eval/triage/cases/008-split-bundled-issues/
3 Human: expanded scope to cross-repo sub-issues + docs Fix agent added create_issues.allow_targets support and docs/triage.md update
4 Human: /fs-fix to address review findings Fix agent addressed 4/5 findings (all-fail guard, GHA sanitization, schema tests, docs)

Assessment

Rework (4 iterations, 2 avoidable): Iterations 1-2 were avoidable and match the pattern in #588. The code agent modified agents/triage.md with new behavioral heuristics but created no eval case. The fix agent then misinterpreted "functional test case" as a unit test, requiring a second clarification. Iteration 3 was intentional scope expansion (cross-repo support was not in the original issue). Iteration 4 was the normal review-fix loop.

Review quality (good): The review agent caught genuine issues: [medium] edge-case (closing issue when all sub-issue creations fail), [medium] stale-doc (docs/triage.md missing split), [low] GHA-workflow-command-injection, [low] missing-test (schema validation). All were valid and the fix agent addressed them. The human approved with 2 remaining [low] GHA injection findings after assessing them as acceptable risk. The review agent did not flag the missing eval case on commit bcd6e07 (which had only a unit test).

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

  • #588 (code agent should create eval cases): This PR is a second independent data point for the same pattern (first: PR feat(#428): instruct triage agent to omit redundant commentary #429). Implementation note: the eval-case guidance should also be accessible to the fix agent (agents/fix.md), not just the code-implementation skill -- in this case, it was the fix agent that needed the eval convention and defaulted to a unit test instead.

Proposals filed

ggallen pushed a commit that referenced this pull request Aug 19, 2026
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
ggallen pushed a commit that referenced this pull request Aug 19, 2026
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
ggallen pushed a commit that referenced this pull request Aug 19, 2026
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
ggallen pushed a commit that referenced this pull request Aug 19, 2026
- 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
ggallen pushed a commit to ggallen/agents that referenced this pull request Aug 19, 2026
…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
ggallen pushed a commit to ggallen/agents that referenced this pull request Aug 19, 2026
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
ggallen pushed a commit to ggallen/agents that referenced this pull request Aug 19, 2026
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
ggallen pushed a commit to ggallen/agents that referenced this pull request Aug 19, 2026
- 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request ready-for-review Triggers review agent dispatch requires-manual-review Review requires human judgment triage-agent

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Triage agent should support splitting a single issue into multiple independent same-repo issues

1 participant