Skip to content

Agents over-create tickets for trivial follow-ups, ignoring per-ticket overhead cost #473

Description

@williamthorsen

Problem

Agents readily propose creating tickets for small follow-ups (one per finding) without weighing per-ticket overhead. Each ticket carries fixed overhead beyond the work itself: backlog maintenance, familiarization, design and planning, implementation, review cycles, PR creation, approval, and merge.

The dynamic surfaces in two places:

  1. Wrap-up sessions. During the wrap-up of Make title formatting fully declarative across commit, PR, ticket, and merge-commit titles #466, the agent presented six trivial follow-ups as candidates for individual tickets — a one-line vocabulary fix, a two-line echo "" cleanup, a YAML quoting note, etc. Tracking each separately would have incurred overhead many times the cost of the underlying work.
  2. Interactive design and planning. When a small adjacent issue arises mid-conversation, the agent's reflex is to offer a follow-up ticket. The collaboration skill's current example reinforces this: "An out-of-scope issue has arisen. A follow-up ticket is needed for it..." — no cost evaluation.

What good looks like

Every finding the agent surfaces is dispositioned into one of three lanes:

  1. Do now (drive-by). Apply on the current branch. Preferred default for trivial items (complexity levels 1–2) when branch state and code overlap permit.
  2. Batch later. Bundle related small items into one ticket. Preferred when several drive-by-ineligible items accumulate to cumulative weight that justifies a single ticket.
  3. Separate ticket. Individual ticket. Reserved for substantive items (complexity levels 3+) and small items that don't fit a batch.

The agent never silently drops or buries findings on threshold grounds. The user retains full discretion to drop any finding explicitly, but the agent does not pre-filter on cost.

Drive-by suitability

A trivial item is a good drive-by candidate when:

  • The current branch isn't already large or complicated (reviewer can absorb the extra).
  • The drive-by change doesn't touch the same code as the branch's main work in a way that forces the reviewer to disentangle concerns within a single diff.
  • Counterintuitively, changes in completely unrelated files are good drive-by candidates — the reviewer can skim past them. The standard "drive-by changes are bad" heuristic over-fires; the real cost is when concerns blur within one file.

Concrete signals an agent can consult:

  • Branch size: git diff --stat {default_branch}..HEAD (caution above ~10 files or ~500 lines).
  • Code overlap: target file's presence in git diff --name-only {default_branch}..HEAD (same-file = caution; different-file = fine).

Worked example: #466 wrap-up

Six items were presented as ticket candidates:

Item Nature Lines Lane under cost-aware model
T1: vocabulary fix in SKILL.md pointer doc nit 1 Do now (drive-by, unrelated file)
T2: echo "" cleanup trivial 2 Do now (drive-by, unrelated file)
T3: YAML quoting note doc ~5 Do now (drive-by, unrelated file)
R1, R2, S1: minor recommendations doc/code <10 each Batch into one ticket if branch is too large for drive-bys

Net under the model: zero to one ticket instead of six.

Suggested fix

  • Add _data/ticket-creation-cost.md — shared reference documenting per-ticket overhead, the three-lane model, drive-by suitability heuristics, and the Make title formatting fully declarative across commit, PR, ticket, and merge-commit titles #466 worked example. Source of truth referenced by consumers.
  • Update wrap-up/SKILL.md:
    • Reframe Phase 2a (quick-fix) as the drive-by lane with explicit branch-state and code-overlap guardrails. Reference the cost document.
    • Add a batch ticket action to Phase 2b alongside per-item tickets. Recommend batch as the default when ≥2 trivial items remain or items share scope: label / source artifact.
    • Drop the "Outstanding" pathway from deferred-findings artifact: remove outstanding_items and counts.outstanding frontmatter fields, drop the body section, and update writer logic. The artifact's purpose narrows to cross-referencing tickets created during the wrap-up.
  • Update _data/artifact-conventions.md — remove outstanding_items and counts.outstanding from the deferred-findings frontmatter spec.
  • Update collaboration/SKILL.md line 35 — replace the reflexive ticket-creation example with cost-aware framing that references the cost document.
  • Verify complexity-classification.md, next-steps-after-plan.md, next-steps-after-review.md — already recommend "implement directly" for level 1–2; ensure wording aligns with the three-lane model and add a natural pointer to the cost document.

Acceptance criteria

  • packages/agents/content/skills/_data/ticket-creation-cost.md exists and documents (a) per-ticket overhead, (b) the three-lane model, (c) drive-by suitability heuristics including branch-state and code-overlap signals, and (d) the Make title formatting fully declarative across commit, PR, ticket, and merge-commit titles #466 worked example.
  • wrap-up/SKILL.md Phase 2a is reframed as the drive-by lane with branch-state and code-overlap guardrails, and references _data/ticket-creation-cost.md.
  • wrap-up/SKILL.md Phase 2b includes a batch-ticket action alongside the per-item action, with batch recommended when ≥2 trivial items remain or items share scope/source.
  • The deferred-findings artifact no longer has an "Outstanding" pathway — frontmatter outstanding_items and counts.outstanding fields removed (in both wrap-up/SKILL.md and _data/artifact-conventions.md), body "Outstanding" section removed, writer logic in Phase 4 Step 1 updated to write only when ≥1 ticket was created.
  • collaboration/SKILL.md line 35 is replaced with cost-aware framing that references _data/ticket-creation-cost.md.
  • complexity-classification.md, next-steps-after-plan.md, and next-steps-after-review.md are reviewed for alignment with the three-lane model; any natural pointer to _data/ticket-creation-cost.md is added.
  • User-facing surface changes (the new shared reference, the new batching action, the removed Outstanding pathway) are reflected consistently across all updated skill files; no stale references remain to the dropped Outstanding section.

Notes

This is a process/agent-behavior issue, not a code defect in the toolchain. The fix lives in skill content (markdown) — not in the orchestration engine or any underlying script. Test criterion is omitted because skill content changes do not exercise testable code paths.

Metadata

Metadata

Labels

featureAdded or improved external functionalityscope:agents

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions