fix(review): close repeated ready<->draft cycling as review evasion - #3962
Conversation
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-07 08:20:35 UTC
⏸️ Suggested Action - Manual Review
Review summary Nits — 5 non-blocking
Concerns raised — review before merging
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3962 +/- ##
=======================================
Coverage ? 93.70%
=======================================
Files ? 373
Lines ? 35010
Branches ? 12820
=======================================
Hits ? 32806
Misses ? 1584
Partials ? 620
🚀 New features to boost your workflow:
|
Enable reviewEvasionProtection for our own repos and add a new guard that fires on the second (and every later) draft conversion for a PR, independent of whether an active review or a recorded gate failure is present. The two existing draft guards only catch dodging DURING a still-running review or AFTER a stored gate block — a contributor who drafts before either fires (e.g. immediately on open, or before CI settles) can otherwise cycle ready<->draft indefinitely to harvest free AI-review/CI feedback while sidestepping the one-shot disposition.
#3939 raised the elevated-band floor from 25 to 31, so two stacked weak signals (30) now land in low, not elevated. Five fixtures still asserted the pre-recalibration boundary; adjust the genuine multi- signal cases to a real 3-signal stack (45) and the single-signal cases to their now-correct low band, per the recalibration's own stated design (elevated requires >=45 or 3x weak).
Rebasing onto #3938's own new settings: block (linkedIssueLabelPropagation) left two top-level settings: keys in .gittensory.yml and its bundled fallback -- invalid YAML that would have silently dropped one of the two setting groups depending on parser behavior. Merge into one block.
bb1fbcd to
74d45b4
Compare
Summary
pull_requests.draft_conversion_count, migration 0118) incremented on everyconverted_to_draftwebhook, independent of head SHA. The second and every later conversion for the same PR is now enforced via the existing close + label + moderation-strike mechanism, reusing the samereviewEvasionProtectionsetting and audit-event family as the two existing guards.reviewEvasionProtection: closein.gittensory.yml(and its bundled fallback copy) for this repo -- previously off, which also meant the two existing draft/self-close evasion guards were inert here. The same setting is now enabled for metagraphed and awesome-claude via a direct config-as-code commit to each (.gittensory.yml), no code change needed there..gittensory.yml'sreadiness.minScorebut not its bundled TS fallback, which was failing the manifest-drift test on main.Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.linkedIssuePolicyhere ispreferrednot required.Validation
git diff --checknpm run typechecknpm run test:coveragelocally -- 100% branch coverage on every new line (repository function + queue handler), verified via lcov branch/line inspection before and after.npm run db:migrations:check/npm run db:schema-drift:checknpm run test:ci(full local gate) -- green.npm audit --audit-level=moderate-- 0 vulnerabilities.Safety
Notes
agent_paused = trueat the DB level, which gates ALL autonomous contributor-facing actions (this guard included) independent ofreviewEvasionProtection. This fix is inert here until that pause is lifted; it is already live for metagraphed and awesome-claude, whose agents are not paused.