Skip to content

feat(automation): do not pick issues that are not the agent's work (AGT-4682) - #823

Merged
unohee merged 1 commit into
mainfrom
feat/agt-4682-agent-eligibility
Oct 3, 2026
Merged

unohee merged 1 commit into
mainfrom
feat/agt-4682-agent-eligibility

Conversation

@unohee

@unohee unohee commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • The heartbeat treated every Todo/Backlog issue of an enabled project as work for the swarm (includeBacklog defaults to true). Moving 13 stale human-owned cards to Backlog made the daemon queue one at once and defer four more.
  • New autonomous.skip rules, applied right after the fetch and before filterAlreadyProcessed so neither selection nor idle fill (which lives in that filter) sees them:
    • a skip label (default swarm:skip, compared case-insensitively),
    • an epic: the issue has sub-issues (the Linear bulk query now fetches children(first: 1)),
    • a title tag that opens a bracket group (default 인수, 확인 원장, Docs).
  • One aggregated log line per reason: not agent work (label:swarm:skip) 2: AX-1, AX-2.
  • A task the operator dispatched by hand is never skipped.

Decisions worth a look

  • [UAT] is not a default tag: cgf-portal's [UAT] issues are mostly defect reports the daemon fixes with real PRs. It stays configurable.
  • [EPIC] is not a default tag: the decision engine's existing umbrella rule (R2) already drops a title-tagged epic. The new epics rule adds the ones that only show up as an issue with sub-issues.
  • Local deployments should add their own labels to autonomous.skip.labels in config.yaml (for example the 외부 검증·결정 대기 label).

Tests

  • agentEligibility.test.ts: each rule, case-insensitivity, tag boundaries, [UAT] not skipped by default, explicit dispatch never skipped, grouping and summary format.
  • autonomousRunner.agentEligibility.test.ts: a real heartbeat() hands only the eligible issue to filterAlreadyProcessed and nothing to selection when none is left.
  • config.test.ts (schema, hand-picked mapping, defaults), linear.test.ts (query asks for children), decisionEngine.stuck.test.ts (hasChildren reaches the task).
  • Mutations: bypassing the partition fails both heartbeat tests; removing the epic, label or explicit-dispatch rule fails the matching unit test.
  • Related suites pass (107 tests) and tsc --noEmit is clean. The heartbeat test needed a longer timeout on a machine at load average 300, so it carries an explicit 60 s limit.

@unohee
unohee merged commit 47f446d into main Oct 3, 2026
7 checks passed
@unohee
unohee deleted the feat/agt-4682-agent-eligibility branch October 3, 2026 15:48
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.

1 participant