Summary
Pluggable resolver chain for automatic assignee detection, and deduplication helper to avoid creating duplicate dispatch issues.
Tasks
Resolver priority
- GitHub org teams matching configured
teamPrefixes
- CODEOWNERS catch-all rules (
* or /)
- JSON mapping in central repo
- Fallback → empty
[]
Acceptance criteria
- Unit tests in
src/core/ownership.test.ts and src/core/dedup.test.ts pass
- Resolver chain stops at the first non-null result
- Dedup returns
null when no issue matches
Summary
Pluggable resolver chain for automatic assignee detection, and deduplication helper to avoid creating duplicate dispatch issues.
Tasks
src/core/ownership.tsteamsResolver → codeownersResolver → mappingResolver → fallbackResolverresolveOwners(ctx, chain?)— first non-null result winscentralRepo/.github-issue-ops/owners.jsonsrc/core/dedup.tsfindExistingDispatchIssue(token, owner, repo, epicUrl)— search query:repo:… label:github-issue-ops in:body {epicUrl} is:openbuildDedupMap(token, org, repos, epicUrl)— batch lookupResolver priority
teamPrefixes*or/)[]Acceptance criteria
src/core/ownership.test.tsandsrc/core/dedup.test.tspassnullwhen no issue matches