sync: stale skill detection, sentry filtering, claim removal, review improvements
Stale Detection: - Detect skills removed/moved from GitHub (3 consecutive 404s threshold) - Hide stale skills from browse/search, show warning banner on detail page - Serve cached files with isStale flag when GitHub returns 404 - Add stale-check crawler command for batch verification - CLI shows warning when installing stale skills from cache Sentry & Error Handling: - Filter browser extension errors and add denyUrls - Anti-inflation measures and sentinel recalibration for curation Claim & Removal: - Enhanced ClaimForm with repo-level removal support - Add repo-removal-request API endpoint with tests - Improved owner page with bilingual content Review Pipeline: - Review version and reviewer tracking in submit API - Source format filter for pending reviews - Updated review tests Other: - Updated i18n strings (en/fa) - BrowseFilters improvements - Dockerfile updates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -545,6 +545,8 @@
|
||||
"browseAll": "Browse all skills",
|
||||
"claimCta": "Is this your repository?",
|
||||
"claimButton": "Claim ownership",
|
||||
"ownerManageCta": "You own these skills.",
|
||||
"ownerManageButton": "Manage / Remove Skills",
|
||||
"installCta": "Install the most popular skill from this owner:",
|
||||
"stats": {
|
||||
"skills": "{count, plural, one {# skill} other {# skills}}",
|
||||
@@ -696,7 +698,8 @@
|
||||
},
|
||||
"tabs": {
|
||||
"remove": "Remove Skill",
|
||||
"add": "Add Skill"
|
||||
"add": "Add Skill",
|
||||
"removeRepo": "Remove Repository"
|
||||
},
|
||||
"form": {
|
||||
"skillId": "Skill ID",
|
||||
@@ -732,7 +735,9 @@
|
||||
"viewRequests": "View My Requests",
|
||||
"foundSkillsIn": "Found skills in:",
|
||||
"root": "(root)",
|
||||
"andMore": "... and {count} more"
|
||||
"andMore": "... and {count} more",
|
||||
"reEnabledTitle": "Repository Re-enabled",
|
||||
"reEnabledDescription": "Your repository has been unblocked and will appear again after the next scan."
|
||||
},
|
||||
"error": {
|
||||
"notOwner": "You are not the owner or admin of this repository. Only repository owners can request removal.",
|
||||
@@ -744,7 +749,8 @@
|
||||
"invalidRepo": "The repository was not found or is not accessible. Please check the URL and ensure the repository is public.",
|
||||
"rateLimitExceeded": "GitHub API rate limit exceeded. Please try again in a few minutes.",
|
||||
"networkTimeout": "Request timed out while checking the repository. Please try again.",
|
||||
"generic": "An error occurred. Please try again."
|
||||
"generic": "An error occurred. Please try again.",
|
||||
"repoBlockedByOwner": "This repository was removed by its owner and cannot be re-added."
|
||||
},
|
||||
"myRequests": {
|
||||
"title": "My Requests",
|
||||
@@ -760,6 +766,25 @@
|
||||
"showLess": "Show less",
|
||||
"showAllPrefix": "Show all ",
|
||||
"showAllSuffix": " paths"
|
||||
},
|
||||
"removeRepoForm": {
|
||||
"repoUrl": "GitHub Repository URL or owner/repo",
|
||||
"repoUrlPlaceholder": "https://github.com/owner/repo",
|
||||
"repoUrlHelp": "All skills from this repository will be removed from SkillHub and it will not be re-indexed.",
|
||||
"reason": "Reason for removal",
|
||||
"reasonPlaceholder": "Why are you removing this repository?",
|
||||
"submit": "Remove All Skills",
|
||||
"submitting": "Removing..."
|
||||
},
|
||||
"removeRepoSuccess": {
|
||||
"title": "Repository Removed",
|
||||
"description": "All {count} skills from {repo} have been removed from SkillHub.",
|
||||
"descriptionZero": "No active skills were found for this repository. It has been blocked from re-indexing."
|
||||
},
|
||||
"removeRepoError": {
|
||||
"notOwner": "You are not the owner of this repository.",
|
||||
"invalidRepo": "Repository not found on GitHub.",
|
||||
"parseError": "Invalid format. Use https://github.com/owner/repo or owner/repo."
|
||||
}
|
||||
},
|
||||
"attribution": {
|
||||
|
||||
@@ -545,6 +545,8 @@
|
||||
"browseAll": "مرور همه مهارتها",
|
||||
"claimCta": "آیا این مخزن شماست؟",
|
||||
"claimButton": "ثبت مالکیت",
|
||||
"ownerManageCta": "این مهارتها متعلق به شما هستند.",
|
||||
"ownerManageButton": "مدیریت / حذف مهارتها",
|
||||
"installCta": "نصب محبوبترین مهارت از این مالک:",
|
||||
"stats": {
|
||||
"skills": "{count, plural, one {# مهارت} other {# مهارت}}",
|
||||
@@ -696,7 +698,8 @@
|
||||
},
|
||||
"tabs": {
|
||||
"remove": "حذف مهارت",
|
||||
"add": "افزودن مهارت"
|
||||
"add": "افزودن مهارت",
|
||||
"removeRepo": "حذف مخزن"
|
||||
},
|
||||
"form": {
|
||||
"skillId": "شناسه مهارت",
|
||||
@@ -732,7 +735,9 @@
|
||||
"viewRequests": "مشاهده درخواستها",
|
||||
"foundSkillsIn": "مهارتها در این مسیرها یافت شدند:",
|
||||
"root": "(root)",
|
||||
"andMore": "... و {count} مورد دیگر"
|
||||
"andMore": "... و {count} مورد دیگر",
|
||||
"reEnabledTitle": "مخزن فعالسازی مجدد شد",
|
||||
"reEnabledDescription": "مخزن شما رفع انسداد شد و پس از اسکن بعدی دوباره نمایش داده خواهد شد."
|
||||
},
|
||||
"error": {
|
||||
"notOwner": "شما مالک یا ادمین این مخزن نیستید. فقط مالکان مخزن میتوانند درخواست حذف دهند.",
|
||||
@@ -744,7 +749,8 @@
|
||||
"invalidRepo": "مخزن یافت نشد یا قابل دسترسی نیست. لطفاً URL را بررسی کنید و اطمینان حاصل کنید که مخزن عمومی است.",
|
||||
"rateLimitExceeded": "محدودیت API GitHub تمام شده است. لطفاً چند دقیقه بعد دوباره تلاش کنید.",
|
||||
"networkTimeout": "هنگام بررسی مخزن زمان اتصال تمام شد. لطفاً دوباره تلاش کنید.",
|
||||
"generic": "خطایی رخ داد. لطفاً دوباره تلاش کنید."
|
||||
"generic": "خطایی رخ داد. لطفاً دوباره تلاش کنید.",
|
||||
"repoBlockedByOwner": "این مخزن توسط مالکش حذف شده و قابل افزودن مجدد نیست."
|
||||
},
|
||||
"myRequests": {
|
||||
"title": "درخواستهای من",
|
||||
@@ -760,6 +766,25 @@
|
||||
"showLess": "نمایش کمتر",
|
||||
"showAllPrefix": "نمایش همه ",
|
||||
"showAllSuffix": " مسیر"
|
||||
},
|
||||
"removeRepoForm": {
|
||||
"repoUrl": "آدرس مخزن گیتهاب یا owner/repo",
|
||||
"repoUrlPlaceholder": "https://github.com/owner/repo",
|
||||
"repoUrlHelp": "تمام مهارتهای این مخزن از SkillHub حذف شده و دیگر ایندکس نخواهد شد.",
|
||||
"reason": "دلیل حذف",
|
||||
"reasonPlaceholder": "چرا این مخزن را حذف میکنید؟",
|
||||
"submit": "حذف تمام مهارتها",
|
||||
"submitting": "در حال حذف..."
|
||||
},
|
||||
"removeRepoSuccess": {
|
||||
"title": "مخزن حذف شد",
|
||||
"description": "تمام {count} مهارت از {repo} از SkillHub حذف شدند.",
|
||||
"descriptionZero": "هیچ مهارت فعالی برای این مخزن یافت نشد. مخزن از ایندکسسازی مجدد مسدود شده است."
|
||||
},
|
||||
"removeRepoError": {
|
||||
"notOwner": "شما مالک این مخزن نیستید.",
|
||||
"invalidRepo": "مخزن در گیتهاب یافت نشد.",
|
||||
"parseError": "فرمت نادرست. از https://github.com/owner/repo یا owner/repo استفاده کنید."
|
||||
}
|
||||
},
|
||||
"attribution": {
|
||||
|
||||
Reference in New Issue
Block a user