@loopover/engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/LICENSE +661 -0
- package/README.md +676 -0
- package/dist/advisory/gate-advisory.d.ts +151 -0
- package/dist/advisory/gate-advisory.js +512 -0
- package/dist/ai-policy-map.d.ts +97 -0
- package/dist/ai-policy-map.js +377 -0
- package/dist/ams-policy-spec.d.ts +56 -0
- package/dist/ams-policy-spec.js +165 -0
- package/dist/calibration-dashboard.d.ts +23 -0
- package/dist/calibration-dashboard.js +65 -0
- package/dist/calibration-trend.d.ts +40 -0
- package/dist/calibration-trend.js +60 -0
- package/dist/contributor-fit.d.ts +24 -0
- package/dist/contributor-fit.js +50 -0
- package/dist/discovery-index-contract.d.ts +74 -0
- package/dist/discovery-index-contract.js +184 -0
- package/dist/discovery-soft-claim.d.ts +35 -0
- package/dist/discovery-soft-claim.js +50 -0
- package/dist/duplicate-winner.d.ts +57 -0
- package/dist/duplicate-winner.js +98 -0
- package/dist/feasibility.d.ts +27 -0
- package/dist/feasibility.js +86 -0
- package/dist/finding-severity-calibration.d.ts +116 -0
- package/dist/finding-severity-calibration.js +457 -0
- package/dist/fleet-run-manifest.d.ts +41 -0
- package/dist/fleet-run-manifest.js +151 -0
- package/dist/focus-manifest/guidance.d.ts +21 -0
- package/dist/focus-manifest/guidance.js +222 -0
- package/dist/focus-manifest.d.ts +826 -0
- package/dist/focus-manifest.js +2730 -0
- package/dist/gate-verdict-calibration.d.ts +111 -0
- package/dist/gate-verdict-calibration.js +411 -0
- package/dist/github/constants.d.ts +1 -0
- package/dist/github/constants.js +1 -0
- package/dist/github/sanitize-public-comment.d.ts +1 -0
- package/dist/github/sanitize-public-comment.js +26 -0
- package/dist/goal-model.d.ts +7 -0
- package/dist/goal-model.js +87 -0
- package/dist/governor/action-mode.d.ts +55 -0
- package/dist/governor/action-mode.js +74 -0
- package/dist/governor/budget-cap.d.ts +49 -0
- package/dist/governor/budget-cap.js +34 -0
- package/dist/governor/chokepoint.d.ts +58 -0
- package/dist/governor/chokepoint.js +269 -0
- package/dist/governor/kill-switch.d.ts +38 -0
- package/dist/governor/kill-switch.js +62 -0
- package/dist/governor/rate-limit.d.ts +40 -0
- package/dist/governor/rate-limit.js +63 -0
- package/dist/governor/reputation-throttle.d.ts +50 -0
- package/dist/governor/reputation-throttle.js +94 -0
- package/dist/governor/run-halt.d.ts +39 -0
- package/dist/governor/run-halt.js +83 -0
- package/dist/governor/self-plagiarism.d.ts +47 -0
- package/dist/governor/self-plagiarism.js +200 -0
- package/dist/governor/write-rate-limit.d.ts +52 -0
- package/dist/governor/write-rate-limit.js +132 -0
- package/dist/governor-ledger.d.ts +25 -0
- package/dist/governor-ledger.js +91 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.js +120 -0
- package/dist/issue-plan-decomposition.d.ts +18 -0
- package/dist/issue-plan-decomposition.js +56 -0
- package/dist/issue-rag-query.d.ts +12 -0
- package/dist/issue-rag-query.js +35 -0
- package/dist/local-scorer.d.ts +34 -0
- package/dist/local-scorer.js +36 -0
- package/dist/metadata-best-min-score.d.ts +9 -0
- package/dist/metadata-best-min-score.js +9 -0
- package/dist/metadata-best-pick.d.ts +9 -0
- package/dist/metadata-best-pick.js +9 -0
- package/dist/metadata-min-score.d.ts +9 -0
- package/dist/metadata-min-score.js +13 -0
- package/dist/metadata-top-min-score.d.ts +9 -0
- package/dist/metadata-top-min-score.js +13 -0
- package/dist/metadata-top-pick.d.ts +9 -0
- package/dist/metadata-top-pick.js +13 -0
- package/dist/miner/acceptance-criteria.d.ts +43 -0
- package/dist/miner/acceptance-criteria.js +77 -0
- package/dist/miner/agent-sdk-driver.d.ts +39 -0
- package/dist/miner/agent-sdk-driver.js +162 -0
- package/dist/miner/attempt-log.d.ts +29 -0
- package/dist/miner/attempt-log.js +100 -0
- package/dist/miner/attempt-metering.d.ts +39 -0
- package/dist/miner/attempt-metering.js +67 -0
- package/dist/miner/cli-subprocess-driver.d.ts +68 -0
- package/dist/miner/cli-subprocess-driver.js +272 -0
- package/dist/miner/coding-agent-driver.d.ts +33 -0
- package/dist/miner/coding-agent-driver.js +36 -0
- package/dist/miner/coding-agent-invoke.d.ts +11 -0
- package/dist/miner/coding-agent-invoke.js +80 -0
- package/dist/miner/coding-agent-mode.d.ts +25 -0
- package/dist/miner/coding-agent-mode.js +43 -0
- package/dist/miner/driver-factory.d.ts +82 -0
- package/dist/miner/driver-factory.js +169 -0
- package/dist/miner/harness-submission-trigger.d.ts +37 -0
- package/dist/miner/harness-submission-trigger.js +46 -0
- package/dist/miner/iterate-loop.d.ts +97 -0
- package/dist/miner/iterate-loop.js +278 -0
- package/dist/miner/iterate-policy.d.ts +98 -0
- package/dist/miner/iterate-policy.js +98 -0
- package/dist/miner/lint-guard.d.ts +50 -0
- package/dist/miner/lint-guard.js +68 -0
- package/dist/miner/local-write-tools.d.ts +81 -0
- package/dist/miner/local-write-tools.js +113 -0
- package/dist/miner/loop-reentry-policy.d.ts +36 -0
- package/dist/miner/loop-reentry-policy.js +53 -0
- package/dist/miner/repo-map.d.ts +51 -0
- package/dist/miner/repo-map.js +268 -0
- package/dist/miner/self-review-adapter.d.ts +106 -0
- package/dist/miner/self-review-adapter.js +83 -0
- package/dist/miner/submission-gate.d.ts +40 -0
- package/dist/miner/submission-gate.js +89 -0
- package/dist/miner/worktree-allocator.d.ts +59 -0
- package/dist/miner/worktree-allocator.js +60 -0
- package/dist/miner/worktree-pool.d.ts +55 -0
- package/dist/miner/worktree-pool.js +65 -0
- package/dist/miner-goal-lane-fit.d.ts +18 -0
- package/dist/miner-goal-lane-fit.js +76 -0
- package/dist/miner-goal-spec.d.ts +139 -0
- package/dist/miner-goal-spec.js +281 -0
- package/dist/miner-prediction-metrics.d.ts +16 -0
- package/dist/miner-prediction-metrics.js +61 -0
- package/dist/miner-telemetry.d.ts +32 -0
- package/dist/miner-telemetry.js +87 -0
- package/dist/objective-anchor.d.ts +125 -0
- package/dist/objective-anchor.js +401 -0
- package/dist/opportunity-competition.d.ts +6 -0
- package/dist/opportunity-competition.js +29 -0
- package/dist/opportunity-freshness.d.ts +18 -0
- package/dist/opportunity-freshness.js +55 -0
- package/dist/opportunity-metadata.d.ts +53 -0
- package/dist/opportunity-metadata.js +204 -0
- package/dist/opportunity-ranker.d.ts +46 -0
- package/dist/opportunity-ranker.js +74 -0
- package/dist/pairwise-calibration.d.ts +49 -0
- package/dist/pairwise-calibration.js +106 -0
- package/dist/phase7-calibration-loop.d.ts +136 -0
- package/dist/phase7-calibration-loop.js +437 -0
- package/dist/plan-blocked.d.ts +6 -0
- package/dist/plan-blocked.js +24 -0
- package/dist/plan-completed.d.ts +5 -0
- package/dist/plan-completed.js +6 -0
- package/dist/plan-completion.d.ts +6 -0
- package/dist/plan-completion.js +7 -0
- package/dist/plan-empty.d.ts +5 -0
- package/dist/plan-empty.js +6 -0
- package/dist/plan-export.d.ts +27 -0
- package/dist/plan-export.js +86 -0
- package/dist/plan-failure.d.ts +5 -0
- package/dist/plan-failure.js +6 -0
- package/dist/plan-overall-status.d.ts +6 -0
- package/dist/plan-overall-status.js +25 -0
- package/dist/plan-pending.d.ts +5 -0
- package/dist/plan-pending.js +6 -0
- package/dist/plan-progress-complete.d.ts +7 -0
- package/dist/plan-progress-complete.js +10 -0
- package/dist/plan-ready.d.ts +6 -0
- package/dist/plan-ready.js +12 -0
- package/dist/plan-running.d.ts +5 -0
- package/dist/plan-running.js +6 -0
- package/dist/plan-skipped.d.ts +5 -0
- package/dist/plan-skipped.js +6 -0
- package/dist/plan-step-count.d.ts +5 -0
- package/dist/plan-step-count.js +6 -0
- package/dist/plan-step-stats.d.ts +5 -0
- package/dist/plan-step-stats.js +6 -0
- package/dist/plan-templates.d.ts +25 -0
- package/dist/plan-templates.js +107 -0
- package/dist/plan-terminated.d.ts +6 -0
- package/dist/plan-terminated.js +9 -0
- package/dist/portfolio/non-convergence.d.ts +37 -0
- package/dist/portfolio/non-convergence.js +57 -0
- package/dist/portfolio/queue.d.ts +30 -0
- package/dist/portfolio/queue.js +150 -0
- package/dist/predicted-gate.d.ts +103 -0
- package/dist/predicted-gate.js +218 -0
- package/dist/prompt-packet.d.ts +11 -0
- package/dist/prompt-packet.js +34 -0
- package/dist/ranked-opportunity-best-min-score.d.ts +8 -0
- package/dist/ranked-opportunity-best-min-score.js +9 -0
- package/dist/ranked-opportunity-best-pick.d.ts +8 -0
- package/dist/ranked-opportunity-best-pick.js +9 -0
- package/dist/ranked-opportunity-min-score.d.ts +8 -0
- package/dist/ranked-opportunity-min-score.js +13 -0
- package/dist/ranked-opportunity-top-min-score.d.ts +8 -0
- package/dist/ranked-opportunity-top-min-score.js +13 -0
- package/dist/review/advisory-ai-routing-config.d.ts +8 -0
- package/dist/review/advisory-ai-routing-config.js +40 -0
- package/dist/review/check-names.d.ts +1 -0
- package/dist/review/check-names.js +1 -0
- package/dist/review/cla-check.d.ts +49 -0
- package/dist/review/cla-check.js +71 -0
- package/dist/review/diff-file-priority.d.ts +1 -0
- package/dist/review/diff-file-priority.js +12 -0
- package/dist/review/enrichment-analyzer-names.d.ts +3 -0
- package/dist/review/enrichment-analyzer-names.js +63 -0
- package/dist/review/guardrail-config.d.ts +10 -0
- package/dist/review/guardrail-config.js +62 -0
- package/dist/review/linked-issue-hard-rules-config.d.ts +4 -0
- package/dist/review/linked-issue-hard-rules-config.js +79 -0
- package/dist/review/linked-issue-label-propagation.d.ts +9 -0
- package/dist/review/linked-issue-label-propagation.js +114 -0
- package/dist/review/pre-merge-checks.d.ts +28 -0
- package/dist/review/pre-merge-checks.js +66 -0
- package/dist/review/review-thread-findings.d.ts +1 -0
- package/dist/review/review-thread-findings.js +1 -0
- package/dist/review/safe-url.d.ts +5 -0
- package/dist/review/safe-url.js +137 -0
- package/dist/review/screenshot-table-gate.d.ts +87 -0
- package/dist/review/screenshot-table-gate.js +340 -0
- package/dist/review/unlinked-issue-guardrail-config.d.ts +9 -0
- package/dist/review/unlinked-issue-guardrail-config.js +44 -0
- package/dist/reviewer-consensus-calibration.d.ts +113 -0
- package/dist/reviewer-consensus-calibration.js +493 -0
- package/dist/reward-risk.d.ts +223 -0
- package/dist/reward-risk.js +618 -0
- package/dist/scoring/label-match.d.ts +4 -0
- package/dist/scoring/label-match.js +145 -0
- package/dist/scoring/model.d.ts +31 -0
- package/dist/scoring/model.js +157 -0
- package/dist/scoring/pending-pr-scenarios.d.ts +44 -0
- package/dist/scoring/pending-pr-scenarios.js +145 -0
- package/dist/scoring/preview.d.ts +246 -0
- package/dist/scoring/preview.js +1108 -0
- package/dist/scoring/types.d.ts +131 -0
- package/dist/scoring/types.js +7 -0
- package/dist/settings/auto-close-exempt.d.ts +10 -0
- package/dist/settings/auto-close-exempt.js +58 -0
- package/dist/settings/autonomy.d.ts +33 -0
- package/dist/settings/autonomy.js +80 -0
- package/dist/settings/command-authorization.d.ts +49 -0
- package/dist/settings/command-authorization.js +222 -0
- package/dist/settings/contributor-blacklist.d.ts +17 -0
- package/dist/settings/contributor-blacklist.js +86 -0
- package/dist/settings/moderation-rules.d.ts +51 -0
- package/dist/settings/moderation-rules.js +104 -0
- package/dist/settings/pr-type-label.d.ts +70 -0
- package/dist/settings/pr-type-label.js +149 -0
- package/dist/signals/change-guardrail.d.ts +49 -0
- package/dist/signals/change-guardrail.js +164 -0
- package/dist/signals/check-summary.d.ts +9 -0
- package/dist/signals/check-summary.js +12 -0
- package/dist/signals/contributor-calibration.d.ts +23 -0
- package/dist/signals/contributor-calibration.js +47 -0
- package/dist/signals/duplicate-winner.d.ts +9 -0
- package/dist/signals/duplicate-winner.js +9 -0
- package/dist/signals/path-matchers.d.ts +36 -0
- package/dist/signals/path-matchers.js +371 -0
- package/dist/signals/predicted-gate-engine.d.ts +62 -0
- package/dist/signals/predicted-gate-engine.js +895 -0
- package/dist/signals/preflight-limits.d.ts +14 -0
- package/dist/signals/preflight-limits.js +14 -0
- package/dist/signals/slop.d.ts +56 -0
- package/dist/signals/slop.js +324 -0
- package/dist/signals/test-evidence.d.ts +25 -0
- package/dist/signals/test-evidence.js +108 -0
- package/dist/subprocess-env.d.ts +23 -0
- package/dist/subprocess-env.js +74 -0
- package/dist/track-record-summary.d.ts +92 -0
- package/dist/track-record-summary.js +301 -0
- package/dist/types/manifest-deps-types.d.ts +514 -0
- package/dist/types/manifest-deps-types.js +4 -0
- package/dist/types/predicted-gate-types.d.ts +338 -0
- package/dist/types/predicted-gate-types.js +3 -0
- package/dist/types/reward-risk-types.d.ts +319 -0
- package/dist/types/reward-risk-types.js +11 -0
- package/dist/utils/json.d.ts +1 -0
- package/dist/utils/json.js +3 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +3 -0
- package/package.json +80 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import type { ContributorEvidenceRecord, RepositoryRecord, RepoTimeDecayOverrides, ScoringModelSnapshotRecord, ScorePreviewRecord } from "./types.js";
|
|
2
|
+
export type ScorePreviewInput = {
|
|
3
|
+
repoFullName: string;
|
|
4
|
+
targetType?: ScorePreviewRecord["targetType"];
|
|
5
|
+
targetKey?: string | undefined;
|
|
6
|
+
contributorLogin?: string | undefined;
|
|
7
|
+
labels?: string[] | undefined;
|
|
8
|
+
linkedIssueMode?: "none" | "standard" | "maintainer" | undefined;
|
|
9
|
+
linkedIssueContext?: LinkedIssueMultiplierContext | undefined;
|
|
10
|
+
sourceTokenScore?: number | undefined;
|
|
11
|
+
totalTokenScore?: number | undefined;
|
|
12
|
+
sourceLines?: number | undefined;
|
|
13
|
+
testTokenScore?: number | undefined;
|
|
14
|
+
nonCodeTokenScore?: number | undefined;
|
|
15
|
+
/** Raw non-code line count before upstream's MAX_LINES_SCORED_FOR_NON_CODE_EXT cap. */
|
|
16
|
+
nonCodeLines?: number | undefined;
|
|
17
|
+
existingContributorTokenScore?: number | undefined;
|
|
18
|
+
openPrCount?: number | undefined;
|
|
19
|
+
/** Contributor's current open-issue count for the repo, used for the open-issue spam gate (#808). */
|
|
20
|
+
openIssueCount?: number | undefined;
|
|
21
|
+
/** Repo-level merged PR count for upstream contributor-history eligibility (#808). */
|
|
22
|
+
mergedPullRequests?: number | undefined;
|
|
23
|
+
/** Count of valid solved issues for upstream issue-discovery eligibility (#808). */
|
|
24
|
+
validSolvedIssues?: number | undefined;
|
|
25
|
+
/** Issue-discovery credibility for upstream issue-discovery eligibility (#808). */
|
|
26
|
+
issueCredibility?: number | undefined;
|
|
27
|
+
credibility?: number | undefined;
|
|
28
|
+
changesRequestedCount?: number | undefined;
|
|
29
|
+
fixedBaseScore?: number | undefined;
|
|
30
|
+
metadataOnly?: boolean | undefined;
|
|
31
|
+
pendingMergedPrCount?: number | undefined;
|
|
32
|
+
pendingClosedPrCount?: number | undefined;
|
|
33
|
+
approvedPrCount?: number | undefined;
|
|
34
|
+
observedApprovedPrCount?: number | undefined;
|
|
35
|
+
observedStalePrCount?: number | undefined;
|
|
36
|
+
observedClosedPrCount?: number | undefined;
|
|
37
|
+
observedDraftPrCount?: number | undefined;
|
|
38
|
+
observedBlockedPrCount?: number | undefined;
|
|
39
|
+
observedMaintainerPrCount?: number | undefined;
|
|
40
|
+
duplicateRiskCount?: number | undefined;
|
|
41
|
+
expectedOpenPrCountAfterMerge?: number | undefined;
|
|
42
|
+
projectedCredibility?: number | undefined;
|
|
43
|
+
scenarioNotes?: string[] | undefined;
|
|
44
|
+
pendingScenarioObserved?: boolean | undefined;
|
|
45
|
+
observedScenarioNotes?: string[] | undefined;
|
|
46
|
+
branchEligibility?: BranchEligibilityInput | undefined;
|
|
47
|
+
/** Hours since the PR merged, for upstream time-decay (#703). Absent / below the grace period = a fresh
|
|
48
|
+
* PR (multiplier 1.0). Only consulted when `applyTimeDecay` is on. */
|
|
49
|
+
prAgeHours?: number | undefined;
|
|
50
|
+
/** Opt-in upstream time-decay (#703), default OFF and env-gated (SCORING_TIME_DECAY_ENABLED) at the call
|
|
51
|
+
* site. Even when on, a fresh PR is unaffected, so it never changes a normal new-PR preview. */
|
|
52
|
+
applyTimeDecay?: boolean | undefined;
|
|
53
|
+
};
|
|
54
|
+
export type BranchEligibilityInput = {
|
|
55
|
+
status: "eligible" | "ineligible" | "unknown";
|
|
56
|
+
source?: "github_metadata" | "local_metadata" | "registry" | "user_supplied" | undefined;
|
|
57
|
+
reason?: string | undefined;
|
|
58
|
+
checkedAt?: string | undefined;
|
|
59
|
+
stale?: boolean | undefined;
|
|
60
|
+
};
|
|
61
|
+
export type BranchEligibilityResult = {
|
|
62
|
+
required: boolean;
|
|
63
|
+
status: "eligible" | "ineligible" | "unknown" | "not_required";
|
|
64
|
+
evidence: "provided" | "missing";
|
|
65
|
+
source: "github_metadata" | "local_metadata" | "registry" | "user_supplied" | "missing";
|
|
66
|
+
reason?: string | undefined;
|
|
67
|
+
checkedAt?: string | undefined;
|
|
68
|
+
stale: boolean;
|
|
69
|
+
warnings: string[];
|
|
70
|
+
};
|
|
71
|
+
export type LinkedIssueMultiplierStatus = "not_required" | "raw" | "plausible" | "validated" | "invalid" | "unavailable";
|
|
72
|
+
export type LinkedIssueMultiplierSource = "none" | "user_supplied" | "official_mirror" | "github_cache" | "issue_quality" | "missing";
|
|
73
|
+
export type LinkedIssueMultiplierContext = {
|
|
74
|
+
status?: Exclude<LinkedIssueMultiplierStatus, "not_required"> | undefined;
|
|
75
|
+
source?: Exclude<LinkedIssueMultiplierSource, "none"> | undefined;
|
|
76
|
+
issueNumbers?: number[] | undefined;
|
|
77
|
+
solvedByPullRequests?: number[] | undefined;
|
|
78
|
+
reason?: string | undefined;
|
|
79
|
+
warnings?: string[] | undefined;
|
|
80
|
+
};
|
|
81
|
+
export type LinkedIssueMultiplierDecision = {
|
|
82
|
+
mode: "none" | "standard" | "maintainer";
|
|
83
|
+
status: LinkedIssueMultiplierStatus;
|
|
84
|
+
source: LinkedIssueMultiplierSource;
|
|
85
|
+
eligible: boolean;
|
|
86
|
+
issueNumbers: number[];
|
|
87
|
+
solvedByPullRequests: number[];
|
|
88
|
+
baseMultiplier: number;
|
|
89
|
+
appliedMultiplier: number;
|
|
90
|
+
reason: string;
|
|
91
|
+
warnings: string[];
|
|
92
|
+
};
|
|
93
|
+
export type ScoreGateBlocker = {
|
|
94
|
+
code: "repo_not_registered" | "inactive_allocation" | "base_token_gate" | "open_pr_threshold" | "open_issue_threshold" | "merged_pr_history_floor" | "issue_discovery_validity_floor" | "credibility_floor" | "review_penalty" | "metadata_only" | "linked_issue_invalid" | "linked_issue_unvalidated" | "branch_ineligible" | "branch_eligibility_missing" | "duplicate_risk" | "stale_work";
|
|
95
|
+
severity: "blocker" | "reducer" | "context";
|
|
96
|
+
detail: string;
|
|
97
|
+
};
|
|
98
|
+
export type ScoreGateDelta = {
|
|
99
|
+
gate: "open_pr_threshold" | "open_issue_threshold" | "merged_pr_history_floor" | "issue_discovery_validity_floor" | "credibility_floor" | "linked_issue_multiplier";
|
|
100
|
+
current: string;
|
|
101
|
+
projected: string;
|
|
102
|
+
explanation: string;
|
|
103
|
+
};
|
|
104
|
+
export type ScoreScenarioPreview = {
|
|
105
|
+
name: "current" | "cleanGates" | "afterPendingMerges" | "afterApprovedPrsMerge" | "afterStalePrsClose" | "linkedIssueFixed" | "bestReasonableCase";
|
|
106
|
+
source: "current_data" | "user_supplied" | "github_observed" | "gittensory_projection";
|
|
107
|
+
assumptions: string[];
|
|
108
|
+
scoreEstimate: ScorePreviewResult["scoreEstimate"];
|
|
109
|
+
gates: ScorePreviewResult["gates"];
|
|
110
|
+
effectiveEstimatedScore: number;
|
|
111
|
+
underlyingPotentialScore: number;
|
|
112
|
+
blockedBy: ScoreGateBlocker[];
|
|
113
|
+
linkedIssueMultiplier: LinkedIssueMultiplierDecision;
|
|
114
|
+
deltaExplanation: string;
|
|
115
|
+
};
|
|
116
|
+
export type ScorePreviewResult = {
|
|
117
|
+
repoFullName: string;
|
|
118
|
+
generatedAt: string;
|
|
119
|
+
scoringModelSnapshotId: string;
|
|
120
|
+
activeModel: ScoringModelSnapshotRecord["activeModel"];
|
|
121
|
+
privateOnly: true;
|
|
122
|
+
laneMath: {
|
|
123
|
+
repoEmissionShare: number;
|
|
124
|
+
ossEmissionShare: number;
|
|
125
|
+
repoSlice: number;
|
|
126
|
+
directPrSlice: number;
|
|
127
|
+
issueDiscoverySlice: number;
|
|
128
|
+
issueDiscoveryShare: number;
|
|
129
|
+
};
|
|
130
|
+
scoreEstimate: {
|
|
131
|
+
/** Computed base score (the earned foundation before multipliers apply). */
|
|
132
|
+
baseScore: number;
|
|
133
|
+
/** The maximum possible baseScore given the active model and snapshot constants; used by the score
|
|
134
|
+
* breakdown to surface saturation vs sub-cap status. Undefined when a fixedBaseScore override is in
|
|
135
|
+
* effect (the override is not bounded by the model cap). */
|
|
136
|
+
baseScoreCap?: number;
|
|
137
|
+
densityMultiplier: number;
|
|
138
|
+
contributionBonus: number;
|
|
139
|
+
labelMultiplier: number;
|
|
140
|
+
issueMultiplier: number;
|
|
141
|
+
credibilityMultiplier: number;
|
|
142
|
+
reviewPenaltyMultiplier: number;
|
|
143
|
+
openPrMultiplier: number;
|
|
144
|
+
openIssueMultiplier: number;
|
|
145
|
+
/** Upstream merged-PR history floor (#808). 0 when below MIN_VALID_MERGED_PRS; 1 when unknown or eligible. */
|
|
146
|
+
mergedHistoryMultiplier: number;
|
|
147
|
+
/** Upstream issue-discovery validity floor (#808). 0 when below MIN_VALID_SOLVED_ISSUES or MIN_ISSUE_CREDIBILITY. */
|
|
148
|
+
issueDiscoveryHistoryMultiplier: number;
|
|
149
|
+
/** Upstream sigmoid time-decay multiplier (#703). 1 = no decay (fresh PR, or feature off). */
|
|
150
|
+
timeDecayMultiplier: number;
|
|
151
|
+
estimatedMergedScore: number;
|
|
152
|
+
pendingSaturationScore: number;
|
|
153
|
+
};
|
|
154
|
+
linkedIssueMultiplier: LinkedIssueMultiplierDecision;
|
|
155
|
+
gates: {
|
|
156
|
+
baseTokenGatePassed: boolean;
|
|
157
|
+
openPrThreshold: number;
|
|
158
|
+
openPrCount: number;
|
|
159
|
+
/** Effective open-PR collateral fraction (OPEN_PR_COLLATERAL_PERCENT × reviewCollateralMultiplier). */
|
|
160
|
+
collateralFraction: number;
|
|
161
|
+
/** Upstream open-PR review-collateral multiplier from CHANGES_REQUESTED reviews (≥ 1, capped). */
|
|
162
|
+
reviewCollateralMultiplier: number;
|
|
163
|
+
credibilityFloor: number;
|
|
164
|
+
credibilityObserved: number;
|
|
165
|
+
openIssueThreshold: number;
|
|
166
|
+
openIssueCount: number;
|
|
167
|
+
mergedPrFloor: number;
|
|
168
|
+
/** Observed merged PR count when supplied or inferred from contributor evidence; absent when unknown. */
|
|
169
|
+
mergedPullRequests?: number | undefined;
|
|
170
|
+
validSolvedIssuesFloor: number;
|
|
171
|
+
/** Observed valid solved-issue count when supplied; absent when unknown. */
|
|
172
|
+
validSolvedIssues?: number | undefined;
|
|
173
|
+
issueCredibilityFloor: number;
|
|
174
|
+
/** Observed issue-discovery credibility when supplied; absent when unknown. */
|
|
175
|
+
issueCredibility?: number | undefined;
|
|
176
|
+
/** Upstream non-code line scoring cap (MAX_LINES_SCORED_FOR_NON_CODE_EXT); non-code token score beyond this
|
|
177
|
+
* many changed non-code lines is not scored. */
|
|
178
|
+
nonCodeLineCap: number;
|
|
179
|
+
/** Observed raw non-code line count before the cap; absent when no non-code line count was supplied. */
|
|
180
|
+
nonCodeLinesObserved?: number | undefined;
|
|
181
|
+
};
|
|
182
|
+
branchEligibility: BranchEligibilityResult;
|
|
183
|
+
effectiveEstimatedScore: number;
|
|
184
|
+
underlyingPotentialScore: number;
|
|
185
|
+
blockedBy: ScoreGateBlocker[];
|
|
186
|
+
gateDeltas: ScoreGateDelta[];
|
|
187
|
+
scenarioPreviews: ScoreScenarioPreview[];
|
|
188
|
+
scoreabilityStatus: "blocked" | "conditionally_scoreable" | "scoreable" | "hold";
|
|
189
|
+
warnings: string[];
|
|
190
|
+
assumptions: string[];
|
|
191
|
+
recommendation: {
|
|
192
|
+
level: "strong_fit" | "reasonable_fit" | "needs_work" | "hold";
|
|
193
|
+
actions: string[];
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
export declare function buildScorePreview(args: {
|
|
197
|
+
input: ScorePreviewInput;
|
|
198
|
+
repo: RepositoryRecord | null;
|
|
199
|
+
snapshot: ScoringModelSnapshotRecord;
|
|
200
|
+
contributorEvidence?: ContributorEvidenceRecord | null | undefined;
|
|
201
|
+
}): ScorePreviewResult;
|
|
202
|
+
export declare function makeScorePreviewRecord(input: ScorePreviewInput, snapshot: ScoringModelSnapshotRecord, result: ScorePreviewResult): ScorePreviewRecord;
|
|
203
|
+
/** True when `label` matches the configured multiplier `pattern` under the SAME case-insensitive fnmatch glob
|
|
204
|
+
* semantics scoring uses to resolve label multipliers (see {@link labelPatternToRegExp}). Exported so the
|
|
205
|
+
* signals surfaces that audit configured label keys (config-quality, label-audit) match them as the GLOBS they
|
|
206
|
+
* are: a `type:*` key must count `type:bug-fix` as observed/configured, not silently report it missing because
|
|
207
|
+
* the literal pattern never appears verbatim on a real issue/PR. A literal key (no glob metacharacter) still
|
|
208
|
+
* matches only its exact label, so existing configs behave identically. */
|
|
209
|
+
export declare function labelMatchesPattern(label: string, pattern: string): boolean;
|
|
210
|
+
export declare const LABEL_PATTERN_REGEXP_CACHE_MAX_ENTRIES = 256;
|
|
211
|
+
export declare function clearLabelPatternRegExpCacheForTest(): void;
|
|
212
|
+
export declare function labelPatternRegExpCacheKeysForTest(): string[];
|
|
213
|
+
/**
|
|
214
|
+
* Project the standard linked-issue multiplier decision under the assumption that a planned PR
|
|
215
|
+
* becomes the merged solver of the given issue(s). Reuses {@link decideLinkedIssueMultiplier} — the
|
|
216
|
+
* same eligibility rule used by buildScorePreview — so standalone validators stay consistent with
|
|
217
|
+
* the scoring engine. The numeric multiplier on the returned decision is private; callers that are
|
|
218
|
+
* public-safe should surface only `eligible`/`status`/`reason`.
|
|
219
|
+
*/
|
|
220
|
+
export declare function projectLinkedIssueMultiplierForPlannedSolve(issueNumbers: number[]): LinkedIssueMultiplierDecision;
|
|
221
|
+
/**
|
|
222
|
+
* Resolve a repo's time-decay curve: each parameter is the repo's per-repo override (from the registry's
|
|
223
|
+
* `scoring.time_decay`) when present, else the global default constant from the live scoring snapshot.
|
|
224
|
+
* Mirrors upstream's `resolve_time_decay` (RepoTimeDecayConfig overlaid on the module constants).
|
|
225
|
+
*
|
|
226
|
+
* Parity note (#1320): upstream coerces ONLY `grace_period_hours` to an integer
|
|
227
|
+
* (`grace_period_hours=int(pick(...))`) while the three curve params stay floats. A maintainer may legally
|
|
228
|
+
* configure a fractional grace (upstream validates `0 <= grace_period_hours <= 168`), so the resolved grace
|
|
229
|
+
* must be truncated toward zero to match the validator — otherwise a PR aged between `trunc(grace)` and
|
|
230
|
+
* `grace` is treated as fresh in the preview but already decaying upstream.
|
|
231
|
+
*/
|
|
232
|
+
export declare function resolveTimeDecay(constants: Record<string, number>, overrides?: RepoTimeDecayOverrides | null): {
|
|
233
|
+
gracePeriodHours: number;
|
|
234
|
+
sigmoidMidpointDays: number;
|
|
235
|
+
sigmoidSteepness: number;
|
|
236
|
+
minMultiplier: number;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Upstream gittensor's sigmoid time-decay multiplier (#703), ported verbatim from the validator's
|
|
240
|
+
* `calculate_time_decay` (gittensor/validator/utils/datetime_utils.py): for the first grace-period hours the
|
|
241
|
+
* multiplier is exactly 1.0 (hard cutoff); after that it follows a logistic on days-since-merge centred at
|
|
242
|
+
* the sigmoid midpoint (50% at that point), floored at the minimum multiplier. The curve params are
|
|
243
|
+
* resolved PER-REPO (overrides ?? snapshot defaults), so each maintainer's registry hyperparameters apply.
|
|
244
|
+
* Pure + deterministic.
|
|
245
|
+
*/
|
|
246
|
+
export declare function calculateTimeDecay(prAgeHours: number, constants: Record<string, number>, overrides?: RepoTimeDecayOverrides | null): number;
|