-
-
Notifications
You must be signed in to change notification settings - Fork 72
Expand file tree
/
Copy path.loopover.yml
More file actions
141 lines (128 loc) · 8.12 KB
/
Copy path.loopover.yml
File metadata and controls
141 lines (128 loc) · 8.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# LoopOver repo focus manifest — machine-readable contributor policy for this project.
# Private maintainerNotes stay in authenticated API surfaces only.
source: repo_file
wantedPaths:
- src/
- packages/
- test/
- migrations/
- scripts/
- review-enrichment/
- .github/workflows/
- wrangler.jsonc
- apps/loopover-ui/
preferredLabels:
- bug
- enhancement
- documentation
linkedIssuePolicy: preferred
testExpectations:
- npm run test:ci
- npm run typecheck
- npm run test:coverage
issueDiscoveryPolicy: discouraged
# Authoritative gate config, config-as-code (layered OVER dashboard repository settings:
# .loopover.yml > DB settings > safe defaults). ONLY confirmed Gittensor contributors are ever
# hard-blocked (see PR #644); these fields only choose what the gate does, not who it applies to.
gate:
# enabled: false # set false to disable the gate from config (turning it on is a dashboard setting)
linkedIssue: advisory # block | advisory | off — issues aren't always available; advise, don't block
duplicates: block # block | advisory | off — block obvious duplicate PRs
readiness:
mode: advisory # advisory | off — readiness score is informational and never blocks the Gate
minScore: 40 # lowered from 60: 73% false-positive rate showed PRs scoring 40-59 merge freely
# aiReview: # opt-in AI maintainer review (off by default; needs the AI flags enabled)
# mode: advisory # block | advisory | off — block only blocks on a dual-model consensus defect
# byok: false # use a maintainer Anthropic/OpenAI key for the write-up; consensus stays on the free/default reviewer
# allAuthors: false # true reviews every PR author with the selected self-host model(s)
# provider: anthropic # anthropic | openai — which BYOK provider (the secret key is set via the dashboard, never here)
# model: claude-3-5-sonnet-latest # optional model override for the BYOK write-up
# Public review-panel content overrides (config-as-code). Maintainer text is dropped if it fails the
# public-safe filter; the Gittensor attribution + register link always stay appended to the footer.
# review:
# footer:
# text: "Reviewed by the Acme maintainer bot." # custom lead line (attribution still appended)
# note: "Run the test suite before requesting review." # short intro line shown above the panel
# fields: # show/hide rows (default: all shown). Stable keys:
# relatedWork: false # linkedIssue | relatedWork | reviewLoad (Change scope) |
# openPrQueue: false # validationEvidence (Validation posture) | openPrQueue (Contributor workload) | contributorContext | gateResult | improvementSignal
# AI-review eligibility filters (#3999): a draft PR previously re-triggered a full AI review on every
# push, letting a contributor iterate for free while tokens kept burning — skip_drafts stops that.
# skip_docs_only skips the reviewer entirely when every changed file is documentation, which never
# needs an AI pass.
review:
auto_review:
skip_drafts: true
skip_docs_only: true
# Linked-issue label propagation (#priority-linked-issue-gate, #priority-linked-issue-gate-ownership,
# #priority-reward-maintainer-trust): a PR that closes/fixes/resolves an issue inherits that issue's
# point-bearing gittensor:* label onto the PR itself, instead of the PR's own label being decided purely by
# its commit-title prefix. bug/feature are `trustMaintainerAuthoredIssue: true` (routine categorization, no
# reward at stake, and the title-based fallback already has zero equivalent verification) so they propagate
# even when the PR author isn't a formal GitHub assignee of the issue — our issues are almost always
# maintainer-authored for open pickup and rarely formally assigned. priority is a scarce, maintainer-hand-
# picked reward label, so it defaults to the strict author-or-assignee-only bar everywhere in this codebase
# EXCEPT here, where we explicitly opt it into the SAME relaxation via `trustMaintainerAuthoredIssueForReward:
# true`: our issues are open-pickup by design (see the flag's own doc comment in types.ts), so requiring a
# literal GitHub assignee relationship -- which GitHub silently refuses for a contributor lacking push/triage
# access -- meant this label could structurally never reach the external contributors it exists to reward. The
# maintainer's hand-picking already happened when the issue was labeled `gittensor:priority`, not gated on
# which contributor later closes it. priority is also `removeOtherTypeLabels: false` (additive) -- unlike
# bug/feature, which are mutually-exclusive TYPE categories, priority is a separate reward dimension that
# coexists WITH whichever type already applies (an issue is routinely both gittensor:feature AND
# gittensor:priority at once); resolvePrTypeLabel composes every additive match alongside the one exclusive
# winner, rather than the two categories competing for a single slot.
#
# Review-evasion protection: closing or converting-to-draft your OWN PR while loopover has an active
# review pass running, a prior recorded gate failure, or a repeated ready<->draft cycle on this PR, is
# treated as dodging the one-shot review rather than an ordinary action (layered OVER the dashboard's
# own default of "off").
#
# Draft-PR close policy: this repo's own CI capacity is shared across a steady stream of contributor PRs,
# and draft PRs were being used to farm bot labels/AI-review/CI feedback for free without ever reaching a
# real one-shot disposition -- close ANY draft immediately, including the first one, rather than waiting
# for reviewEvasionProtection's narrower "already reviewed" or "repeated cycling" triggers above.
settings:
linkedIssueLabelPropagation:
enabled: true
mode: exclusive_type_label
mappings:
- issueLabel: "gittensor:bug"
prLabel: "gittensor:bug"
removeOtherTypeLabels: true
trustMaintainerAuthoredIssue: true
- issueLabel: "gittensor:feature"
prLabel: "gittensor:feature"
removeOtherTypeLabels: true
trustMaintainerAuthoredIssue: true
- issueLabel: "gittensor:priority"
prLabel: "gittensor:priority"
removeOtherTypeLabels: false
trustMaintainerAuthoredIssueForReward: true
reviewEvasionProtection: close
draftPrClosePolicy: close
# Agent-layer autonomy dial (#773): without this block every action class defaults to "observe"
# (deny-by-default) -- loopover had NO repository_settings DB row at all, so merge/close/approve
# actions were silently never taken regardless of review verdict (#6401, #6402 sat fully reviewed,
# CI-green, and mergeable with no auto-merge attempt). Matches the policy JSONbored/awesome-claude and
# JSONbored/metagraphed already carry live in their DB rows -- this makes it config-as-code instead.
autonomy:
merge: auto
close: auto
approve: auto
request_changes: auto
update_branch: auto
assign: auto
# Repo-doc generation roadmap (#2993/#3002) — opt-in only, off by default. Uncomment to let LoopOver open a
# PR generating AGENTS.md/CLAUDE.md from this repo's own profile.
# repoDocGeneration:
# enabled: true # default false — must be explicitly turned on per repo
# scope: [agents] # agents | skills — which generated file types are in play
# allowOverwriteExisting: false # required before LoopOver will touch an existing hand-maintained file
publicNotes:
- Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.
- Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.
- Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work.
maintainerNotes:
- Maintainer notes are private triage context and must not appear on public GitHub comments.
- Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work.