Skip to content

Agents treat ticket scope as a boundary, reflexively spinning off discovered work #964

Description

@williamthorsen

Problem

On discovering work the ticket doesn't name, agents default to treating it as out of scope and offer a follow-up ticket — even when the work is required to actually solve the problem, or is cheap and serves the ticket's goal. "The ticket didn't mention it" is offered as if it were a sufficient reason to defer. The reflex fires across design, review, and implementation flows. Against a large backlog where each ticket spawns more, it is a primary driver of unsustainable growth.

The correct third path — fold the work into the current change — is missing from the guidance agents read most. guidance/shared/AGENTS.md (loaded every session) frames the choice as a false binary: create a follow-up issue, or implement ad hoc / silently defer. The nuance that would prevent the reflex exists, but is scattered across ticket-creation-cost.md, ticket-evaluation.md, and design-priorities.md, and none of the reflex-firing surfaces point to a single governing default.

Context

Scoped to the fold-in-vs-spin-off decision — how the agent treats ticket scope when it discovers adjacent work. Over-trusting the ticket's problem framing or proposed solution is a separate facet of deference already owned by ticket-evaluation.md, and is out of scope here.

The knowledge store holds ~10 distinct events describing this exact pattern — several rated high-impact, none yet addressed — spanning design-and-plan, review, and implementation. The most recent classifies it as misapplied existing guidance, so the fix is consolidation and correcting a misleading default, not net-new rules.

Proposed solution

Establish one governing scope-decision default and route the reflex-firing surfaces to it, favoring revision and consolidation over addition.

  • Invert the default: work the problem requires, or that is cheap and serves the ticket's goal, is folded into the current change by default. A separate ticket needs an affirmative, stated reason — a genuinely separable concern, a materially different risk surface, size that would swamp the change, or independent prioritization. Ticket silence is never such a reason and must not be offered as one.
  • Authority: the agent surfaces and recommends; the user owns the scope decision. The agent never declares work out of scope as settled fact.
  • Feature responsibility: an avoidable user-visible defect the current change introduces is in-scope-by-default, not an automatic follow-up.
  • Cost framing: the bar for spinning off is the full ticket pipeline (create through merge and cleanup) plus opportunity cost against the backlog — not PR size. Small, clean PRs have real value, but it must clear that bar. Frame the pipeline as a whole, without enshrining a step count.
  • Consolidate: reframe _data/ticket-creation-cost.md into the single scope-decision doctrine (renamed scope-and-deferral.md), retaining its three-lane model, drive-by suitability, and worked example, and adding the four points above.
  • Keystone: rewrite the false-binary line in guidance/shared/AGENTS.md to state the fold-in default and point to the doctrine — a revision, not an addition.
  • Reconciles with "create tickets immediately": once work is judged genuinely separable, ticket it now. This governs whether to defer, not how.

Acceptance criteria

Must have

  • guidance/shared/AGENTS.md no longer presents the create-ticket-vs-implement-ad-hoc binary; it states the fold-in default (spin off only with an affirmative reason beyond ticket silence) and points to the doctrine.
  • A single scope-decision doctrine states the inverted default, the authority axis, and the feature-responsibility corollary, and frames spin-off cost as the full pipeline plus opportunity cost.
  • The doctrine reconciles the fold-in default with "create tickets immediately" (whether-to-defer vs. how-to-defer).
  • ticket-creation-cost.md is renamed to scope-and-deferral.md with its three-lane model, drive-by suitability, and worked example retained; every referencer is updated with no dangling references.
  • No new standalone guidance file or rule is introduced: the doctrine is consolidated into the reframed file, and cross-references are one-line pointers, not restatements.

Should have

  • ticket-evaluation.md and design-and-plan Phase 2 carry a one-line pointer that scope can grow (fold-in), not just shrink.
  • The relevant events are marked addressed-by the resulting change in the knowledge store.

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