Documentation
¶
Overview ¶
Package radar ranks locally stored contribution candidates with transparent, deterministic signals. It performs no I/O and owns no GitHub capability.
Index ¶
- Constants
- type Candidate
- type Coverage
- type DiscussionComment
- type DiscussionSummary
- type DuplicateCluster
- type Eligibility
- type GuidanceDocument
- type IssueSnapshot
- type LinkedPullRequest
- type Options
- type RelatedWork
- type RelatedWorkEvidence
- type Report
- type RepositorySnapshot
- type Signal
- type Unknown
Constants ¶
const ( // ScoreVersion changes whenever ranking semantics change. ScoreVersion = "radar.v3" // DefaultLimit is the default number of returned candidates. DefaultLimit = 20 // MaxLimit bounds one radar response. MaxLimit = 500 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Candidate ¶
type Candidate struct {
Rank int `json:"rank"`
Ref string `json:"ref"`
Repo string `json:"repo"`
Number int `json:"number"`
Title string `json:"title"`
URL string `json:"url"`
Labels []string `json:"labels"`
Eligibility Eligibility `json:"eligibility"`
BaseScore int `json:"base_score"`
Score int `json:"score"`
ScoreVersion string `json:"score_version"`
Confidence string `json:"confidence"`
PositiveSignals []Signal `json:"positive_signals"`
Risks []Signal `json:"risks"`
Blockers []Signal `json:"blockers"`
Unknowns []Unknown `json:"unknowns"`
Coverage []Coverage `json:"coverage"`
LinkedPullRequests []LinkedPullRequest `json:"linked_pull_requests"`
RelatedWork []RelatedWork `json:"related_work"`
DuplicateCluster *DuplicateCluster `json:"duplicate_cluster,omitempty"`
SourceUpdatedAt time.Time `json:"source_updated_at,omitempty"`
SourceAsOf time.Time `json:"source_as_of,omitempty"`
}
Candidate is one ranked, fully explained issue.
type Coverage ¶
type Coverage struct {
Facet string `json:"facet"`
Scope string `json:"scope"`
Present bool `json:"present"`
Complete bool `json:"complete"`
AsOf time.Time `json:"as_of,omitempty"`
}
Coverage is the bounded facet coverage relevant to a recommendation.
type DiscussionComment ¶ added in v0.8.0
type DiscussionComment struct {
Author string
AuthorAssociation string
Body string
URL string
CreatedAt time.Time
}
DiscussionComment is the product-owned discussion evidence consumed by the pure eligibility classifier.
type DiscussionSummary ¶ added in v0.8.0
type DiscussionSummary struct {
MaintainerResponseURL string
MaintainerDirection string
MaintainerDirectionURL string
ActiveClaimAuthors []string
ActiveClaimURL string
}
DiscussionSummary is the bounded, source-backed eligibility evidence extracted from a complete stored comment snapshot.
func SummarizeDiscussion ¶ added in v0.8.0
func SummarizeDiscussion(comments []DiscussionComment, now time.Time) DiscussionSummary
SummarizeDiscussion classifies a complete stored comment snapshot into the compact facts needed by contribution eligibility. It performs no I/O.
type DuplicateCluster ¶
type DuplicateCluster struct {
StableID string `json:"stable_id"`
CanonicalRef string `json:"canonical_ref"`
CandidateCount int `json:"candidate_count"`
SourceAsOf time.Time `json:"source_as_of,omitempty"`
}
DuplicateCluster is a stored, explainable duplicate-candidate fact.
type Eligibility ¶
type Eligibility string
Eligibility separates objective state from a candidate's numeric score.
const ( // EligibilityReadyToCode means source-backed policy, ownership, discussion, // and issue evidence contain no reason to delay implementation. EligibilityReadyToCode Eligibility = "ready_to_code" // EligibilityNeedsDiagnosis means the problem or requested behavior still // needs reproduction, triage, or acceptance clarification. EligibilityNeedsDiagnosis Eligibility = "needs_diagnosis" // EligibilityNeedsCoordination means a contributor should coordinate with // maintainers or another participant before starting implementation. EligibilityNeedsCoordination Eligibility = "needs_coordination" // EligibilityBlocked means stored evidence contains an objective blocker. EligibilityBlocked Eligibility = "blocked" )
type GuidanceDocument ¶ added in v0.8.0
GuidanceDocument is one source-backed repository policy document.
type IssueSnapshot ¶
type IssueSnapshot struct {
Number int
State string
Title string
Body string
Labels []string
Assignees []string
Locked bool
SourceUpdated time.Time
URL string
Coverage []Coverage
Discussion DiscussionSummary
LinkedPullRequests []LinkedPullRequest
RelatedWork []RelatedWork
RelatedWorkCapped bool
DuplicateCluster *DuplicateCluster
}
IssueSnapshot contains one locally stored issue and its derived local facts.
type LinkedPullRequest ¶
type LinkedPullRequest struct {
Number int `json:"number"`
Title string `json:"title"`
URL string `json:"url"`
Closing bool `json:"closing"`
SourceUpdatedAt time.Time `json:"source_updated_at,omitempty"`
}
LinkedPullRequest is an open PR that explicitly references an issue.
type Options ¶
type Options struct {
Limit int
Now time.Time
TotalOpenIssues int
PopulationCapped bool
LinkedPullRequestScanCapped bool
DuplicateClusterScanCapped bool
}
Options bounds a deterministic ranking operation.
type RelatedWork ¶ added in v0.8.0
type RelatedWork struct {
Ref string `json:"ref"`
Kind string `json:"kind"`
Number int `json:"number,omitempty"`
Title string `json:"title,omitempty"`
State string `json:"state,omitempty"`
Relation string `json:"relation"`
Direction string `json:"direction,omitempty"`
URL string `json:"url,omitempty"`
Evidence []RelatedWorkEvidence `json:"evidence"`
SourceUpdatedAt time.Time `json:"source_updated_at,omitempty"`
}
RelatedWork is one normalized issue, pull request, or local cluster related to a candidate. Relation is the strongest stored relationship; Evidence preserves every distinct source that contributed to that conclusion.
type RelatedWorkEvidence ¶ added in v0.8.0
type RelatedWorkEvidence struct {
Kind string `json:"kind"`
SourceURL string `json:"source_url"`
SourceAsOf time.Time `json:"source_as_of,omitempty"`
}
RelatedWorkEvidence identifies one stored source supporting a relationship.
type Report ¶
type Report struct {
Repo string `json:"repo"`
ScoreVersion string `json:"score_version"`
GeneratedAt time.Time `json:"generated_at"`
SourceAsOf time.Time `json:"source_as_of,omitempty"`
Limit int `json:"limit"`
TotalOpenIssues int `json:"total_open_issues"`
CandidatePopulation int `json:"candidate_population"`
PopulationCapped bool `json:"population_capped"`
Unknowns []Unknown `json:"unknowns"`
Candidates []Candidate `json:"candidates"`
}
Report is the offline contribution radar result for one repository.
func Rank ¶
func Rank(repo RepositorySnapshot, issues []IssueSnapshot, opts Options) (*Report, error)
Rank scores a bounded set of local issue snapshots. Missing coverage is represented as unknown and never silently converted into a penalty.
type RepositorySnapshot ¶
type RepositorySnapshot struct {
Repo domain.RepoRef
Archived bool
SourceUpdated time.Time
Coverage []Coverage
GuidanceStatus string
Guidance []GuidanceDocument
}
RepositorySnapshot contains only product-owned facts required by Rank.