AI Slop Code RIsk Monitor

iflytek/skillhub

Self-hosted, open-source agent skill registry for enterprises. Publish & version skill packages, govern with RBAC and audit logs, deploy on-premise with Docker or Kubernetes.

4.9 Low pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for iflytek/skillhub, a Java project with 5,171 GitHub stars. SynthScan examined 342,727 lines of code across 2496 source files, recording 498 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 4.9 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

4.9
Adjusted Signal
4.9
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
5.2K
Stars
Java
Language
342.7K
Lines of Code
2.5K
Files
498
Pattern Hits
2026-10-12
Scan Date
0.04
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 4.2/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 230 finding(s).

Hallucinated Dependency & Supply Chain Risk 15.0/100 · LOW

Are imports declared and package/API names verified? 191 finding(s).

Agent Over-Engineering Ratio 6.2/100 · LOW

Are wrappers, guards, and repeated structures necessary? 249 finding(s).

PR Review Velocity Impact 21.0/100 · LOW

Which changes need focused human review? 498 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 102HIGH 6MEDIUM 85LOW 305

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 498 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hallucination Indicators102 hits · 1012 pts
SeverityFileLineSnippetContext
CRITICAL⚡…ek/skillhub/infra/scanner/SkillScannerServiceTest.java21 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL⚡…ek/skillhub/infra/scanner/SkillScannerServiceTest.java24 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL⚡…ek/skillhub/infra/scanner/SkillScannerServiceTest.java27 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL⚡…ek/skillhub/infra/scanner/SkillScannerServiceTest.java30 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL…a/com/iflytek/skillhub/infra/http/WebClientConfig.java27 reactor.netty.http.client.HttpClient reactorClient = reactor.netty.http.client.HttpClient.create()CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java36 new com.iflytek.skillhub.auth.session.PlatformSessionService(),CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java45 var principal = new com.iflytek.skillhub.auth.rbac.PlatformPrincipal(CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java79 new com.iflytek.skillhub.auth.session.PlatformSessionService(),CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java89 var principal = new com.iflytek.skillhub.auth.rbac.PlatformPrincipal(CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java121 new com.iflytek.skillhub.auth.session.PlatformSessionService(),CODE
CRITICAL⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java131 var principal = new com.iflytek.skillhub.auth.rbac.PlatformPrincipal(CODE
CRITICAL…tek/skillhub/auth/oauth/CustomOidcUserServiceTest.java186 new org.springframework.security.oauth2.core.OAuth2Error("access_denied")));CODE
CRITICAL…h/oauth/FeishuOAuth2AccessTokenResponseClientTest.java185 org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse.withToken("github-token")STRING
CRITICAL…iflytek/skillhub/auth/oauth/GitHubClaimsExtractor.java33 @org.springframework.beans.factory.annotation.Value("${skillhub.auth.github.api-base-urCODE
CRITICAL…illhub/repository/SkillSuiteBundlePersistenceTest.java190 var manifest = new com.iflytek.skillhub.domain.suite.bundle.SkillSuiteBundleManifestParser().parse("""CODE
CRITICAL…lytek/skillhub/compat/ClawHubCompatAppServiceTest.java110 assertThat(java.nio.charset.StandardCharsets.ISO_8859_1.newEncoder().canEncode(location)).isTrue();CODE
CRITICAL…k/skillhub/listener/NotificationEventListenerTest.java274 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL…k/skillhub/listener/NotificationEventListenerTest.java349 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL…k/skillhub/listener/NotificationEventListenerTest.java369 org.assertj.core.api.Assertions.assertThatThrownBy(() ->CODE
CRITICAL…flytek/skillhub/stream/AbstractStreamConsumerTest.java72 org.assertj.core.api.Assertions.assertThatThrownBy(CODE
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java86 .willReturn(List.of(new com.iflytek.skillhub.domain.namespace.NamespaceMember(1L, "owner-1", NamespaceRoCODE
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java152 org.springframework.data.domain.PageRequest.of(0, 20),CODE
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java203 mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put("/api/v1/namespaces/teamCODE
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java251 .willReturn(new org.springframework.data.domain.PageImpl<>(List.of(), org.springframework.data.domain.PaSTRING
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java269 .willReturn(new org.springframework.data.domain.PageImpl<>(List.of(member), org.springframework.data.domSTRING
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java335 mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/api/v1/namespaces/tSTRING
CRITICAL…skillhub/controller/NamespacePortalControllerTest.java355 mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put("/api/v1/namespaces/teamSTRING
CRITICAL…ytek/skillhub/controller/GovernanceControllerTest.java182 mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post("/api/v1/governance/notCODE
CRITICAL…ytek/skillhub/controller/GovernanceControllerTest.java183 .with(org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessorsCODE
CRITICAL…m/iflytek/skillhub/controller/SkillControllerTest.java185 new com.iflytek.skillhub.domain.skill.service.SkillLifecycleProjectionService.VersionProjection(STRING
CRITICAL…m/iflytek/skillhub/controller/SkillControllerTest.java187 new com.iflytek.skillhub.domain.skill.service.SkillLifecycleProjectionService.VersionProjection(STRING
CRITICAL…skillhub/controller/NamespaceWorkflowContractTest.java211 org.springframework.test.util.ReflectionTestUtils.setField(namespace, "id", id);CODE
CRITICAL…skillhub/controller/NamespaceWorkflowContractTest.java215 org.springframework.test.util.ReflectionTestUtils.setField(member, "id", id);CODE
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java129 var token = new com.iflytek.skillhub.auth.entity.ApiToken("user-42", "cli", "sk_123456", "hash-1", "[]");STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java130 org.springframework.test.util.ReflectionTestUtils.setField(token, "id", 7L);STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java131 org.springframework.test.util.ReflectionTestUtils.setField(token, "createdAt", java.time.Instant.parse("2026-03-STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java159 new com.iflytek.skillhub.auth.entity.ApiToken("user-42", "cli", "sk_123456", "hash-1", "[]"),STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java160 new com.iflytek.skillhub.auth.entity.ApiToken("user-42", "deploy", "sk_654321", "hash-2", "[]")STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java167 org.springframework.test.util.ReflectionTestUtils.setField(first, "id", 7L);STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java168 org.springframework.test.util.ReflectionTestUtils.setField(first, "createdAt", java.time.Instant.parse("2026-03-STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java169 org.springframework.test.util.ReflectionTestUtils.setField(second, "id", 8L);STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java170 org.springframework.test.util.ReflectionTestUtils.setField(second, "createdAt", java.time.Instant.parse("2026-03STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java195 var token = new com.iflytek.skillhub.auth.entity.ApiToken("user-42", "cli", "sk_123456", "hash-1", "[]");STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java196 org.springframework.test.util.ReflectionTestUtils.setField(token, "id", 7L);STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java197 org.springframework.test.util.ReflectionTestUtils.setField(token, "createdAt", java.time.Instant.parse("2026-03-STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java225 List.of(new com.iflytek.skillhub.auth.entity.ApiToken("user-42", "cli", "sk_123456", "hash-1", "[]")),STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java230 org.springframework.test.util.ReflectionTestUtils.setField(token, "id", 7L);STRING
CRITICAL⚡…m/iflytek/skillhub/controller/TokenControllerTest.java231 org.springframework.test.util.ReflectionTestUtils.setField(token, "createdAt", java.time.Instant.parse("2026-03-STRING
CRITICAL…ek/skillhub/controller/ReviewPortalControllerTest.java226 .willThrow(new com.iflytek.skillhub.domain.shared.exception.DomainForbiddenException("review.no_permissiCODE
CRITICAL…ek/skillhub/controller/ReviewPortalControllerTest.java486 .andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.header()CODE
CRITICAL⚡…ub/controller/portal/SkillLifecycleControllerTest.java422 org.springframework.test.util.ReflectionTestUtils.setField(namespace, "id", id);CODE
CRITICAL⚡…ub/controller/portal/SkillLifecycleControllerTest.java426 org.springframework.test.util.ReflectionTestUtils.setField(skill, "id", id);CODE
CRITICAL⚡…ub/controller/portal/SkillLifecycleControllerTest.java430 org.springframework.test.util.ReflectionTestUtils.setField(version, "id", id);CODE
CRITICAL…portal/SkillApprovalVisibilityFlowIntegrationTest.java142 .thenReturn(List.of(new com.iflytek.skillhub.domain.namespace.NamespaceMember(CODE
CRITICAL…ek/skillhub/controller/cli/CliSkillControllerTest.java139 var response = new com.iflytek.skillhub.dto.cli.CliNamespaceSyncResponse(CODE
CRITICAL…ek/skillhub/controller/cli/CliSkillControllerTest.java140 List.of(new com.iflytek.skillhub.dto.cli.CliNamespaceSyncItemResponse(CODE
CRITICAL…ek/skillhub/controller/cli/CliSkillControllerTest.java170 new com.iflytek.skillhub.dto.cli.CliResolveResponse(CODE
CRITICAL…ek/skillhub/controller/cli/CliSkillControllerTest.java189 new com.iflytek.skillhub.dto.cli.CliResolveResponse(CODE
CRITICAL…ek/skillhub/controller/cli/CliSkillControllerTest.java246 )).willReturn(new com.iflytek.skillhub.dto.cli.CliDeleteResponse(CODE
CRITICAL…flytek/skillhub/service/SkillSearchAppServiceTest.java128 new com.iflytek.skillhub.domain.shared.exception.DomainBadRequestException(CODE
42 more matches not shown…
Decorative Section Separators74 hits · 240 pts
SeverityFileLineSnippetContext
MEDIUMweb/e2e/search-page-full.spec.ts29// ─── Search Input ────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-page-full.spec.ts103// ─── Sort / Filter ────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-page-full.spec.ts173// ─── Skill Count ──────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-page-full.spec.ts213// ─── Search Results ───────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-page-full.spec.ts266// ─── Pagination ───────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-page-full.spec.ts300// ─── Security ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts107// ─── Card Display After Search ────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts160// ─── Card Content & Search Relevance ─────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts188// ─── Card Click Navigation ────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts236// ─── Sort Switching Updates Cards ────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts275// ─── Pagination Card Updates ──────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts315// ─── Loading State ────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts331// ─── Responsive Layout ────────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts392// ─── Keyboard Navigation ──────────────────────────────────────────────────────COMMENT
MEDIUMweb/e2e/search-card-interaction.spec.ts435// ─── Error Handling ───────────────────────────────────────────────────────────COMMENT
MEDIUM⚡charts/skillhub/values.yaml1# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml3# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml5# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml7# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml78# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml80# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml84# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml86# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml95# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml97# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml100# ============================================================================COMMENT
MEDIUM⚡charts/skillhub/values.yaml102# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml44# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml46# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml62# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml64# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml122# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml124# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml208# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml210# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml300# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml302# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml389# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml391# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml452# ============================================================================COMMENT
MEDIUMcharts/skillhub/values.yaml454# ============================================================================COMMENT
MEDIUM…iflytek/skillhub/domain/user/ProfileReviewService.java126 // ── Private helpers ──────────────────────────────────────────────COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh219# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh221# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh229# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh231# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh240# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh242# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh252# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh254# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh262# ----------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/tests/publish-cli-test.sh264# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh276# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh278# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh296# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh298# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh337# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh339# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh350# ----------------------------------------------------------------------------COMMENT
MEDIUMscripts/tests/publish-cli-test.sh352# ----------------------------------------------------------------------------COMMENT
14 more matches not shown…
Hyper-Verbose Identifiers172 hits · 186 pts
SeverityFileLineSnippetContext
LOWweb/e2e/role-access-control.spec.ts5async function expectLeaveForbiddenRoute(page: Page, route: string) {CODE
LOWweb/e2e/dashboard-routes.spec.ts5async function expectRouteOpenOrRedirected(page: Page, route: string, heading: string) {CODE
LOWweb/e2e/promotions-review.spec.ts92 async function installPromotionRouteMock(page: Page, expectedSignatures: string[]) {CODE
LOWweb/e2e/promotions-review.spec.ts234 function expectPromotionRequestsSatisfied() {CODE
LOWweb/e2e/rejected-version-republish.spec.ts18function withoutKnownMetaCspWarning(messages: string[]): string[] {CODE
LOWweb/e2e/helpers/test-data-builder.ts85async function runCleanupTaskWithTimeout(task: CleanupTask): Promise<void> {CODE
LOWweb/e2e/helpers/test-data-builder.ts126function buildSkillPackageZipBuffer(suffix: string, options?: SeedSkillOptions): Buffer {CODE
LOWweb/e2e/helpers/test-data-builder.ts148function createSkillPackageZipFile(suffix: string, options?: SeedSkillOptions): { filePath: string; cleanup: () => void CODE
LOWweb/e2e/helpers/session.ts137async function restoreCachedSessionForAccount(page: Page, username: string): Promise<SessionSnapshot | null> {CODE
LOWweb/e2e/helpers/review-seed.ts26export async function createNamespaceReviewData(CODE
LOWweb/e2e/helpers/search-seed.ts57async function openProvidedPublisherSession(browser: Browser, testInfo: TestInfo): Promise<PublisherSession> {CODE
LOWweb/e2e/helpers/search-seed.ts73async function openAdhocPublisherSession(browser: Browser, testInfo: TestInfo): Promise<PublisherSession> {CODE
LOWweb/src/bootstrap.ts23function ensureRuntimeConfigFallback() {CODE
LOWweb/src/app/layout-main-content.ts18export function resolveAppMainContentPathname(CODE
LOWweb/src/app/router.tsx77 return function RoleProtectedRouteComponent(props: Record<string, unknown>) {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts4export function usePromotionRevocationHistory(sourceSkillId: number, enabled: boolean) {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts12export function usePendingPromotionRevocations() {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts19export function useAdminPromotionRevocationHistory(page: number, size: number) {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts40export function useSubmitPromotionRevocation() {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts45export function useDirectPromotionRevocation() {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts50export function useApprovePromotionRevocation() {CODE
LOW⚡web/src/features/promotion/use-promotion-revocations.ts55export function useRejectPromotionRevocation() {CODE
LOWweb/src/features/skill/skill-delete-flow.ts4export function isDeleteSlugConfirmationValid(expectedSlug: string, typedSlug: string) {CODE
LOWweb/src/features/skill/skill-delete-flow.ts8export function resolveDeletedSkillReturnTo(returnTo?: string) {CODE
LOWweb/src/features/skill/markdown-renderer.tsx146function MarkdownRendererComponent({ content, className, onLinkClick }: MarkdownRendererProps) {CODE
LOWweb/src/features/skill/install-command.tsx44export function buildSkillhubInstallCommand(CODE
LOWweb/src/features/skill/code-language.ts28export function inferMarkdownCodeLanguage(value: string): string | undefined {CODE
LOWweb/src/features/skill/skill-action-error.ts1export function resolveSkillActionErrorTitle(action: 'download' | 'report') {CODE
LOWweb/src/features/skill/overview-collapse.ts5export function getOverviewCollapseMaxHeight(viewportWidth: number, viewportHeight: number) {CODE
LOWweb/src/features/skill/overview-collapse.ts18export function shouldReleaseOverviewLayoutQuiet(activeGeneration: number, scheduledGeneration: number) {CODE
LOWweb/src/features/skill/package-relative-link.ts84export function resolvePackageRelativeLink(CODE
LOWweb/src/features/auth/use-auth-methods.ts8export function getAuthMethodsQueryOptions(returnTo?: string) {CODE
LOWweb/src/features/notification/use-notifications.ts32export function markCachedNotificationRead(CODE
LOWweb/src/features/notification/use-notifications.ts46export function markAllCachedNotificationsRead(CODE
LOWweb/src/features/notification/use-notifications.ts74export function getNotificationListQueryOptions(CODE
LOWweb/src/features/notification/use-notifications.ts90export function getUnreadCountQueryOptions(userId?: string | null) {CODE
LOWweb/src/features/notification/use-notifications.ts145export function useDeleteReadNotification(userId?: string | null) {CODE
LOWweb/src/features/notification/notification-bell.tsx7export function resolveNotificationUserId(user?: { userId?: string } | null) {CODE
LOWweb/src/features/notification/notification-content.ts29export function resolveNotificationDisplay(item: NotificationItem, language: string): NotificationDisplay {CODE
LOWweb/src/features/notification/notification-target.ts3export function resolveNotificationTarget(item: NotificationItem): string {CODE
LOW…/features/notification/use-notification-preferences.ts11export function useNotificationPreferences() {CODE
LOW…/features/notification/use-notification-preferences.ts22export function useUpdateNotificationPreferences() {CODE
LOWweb/src/features/notification/notification-page.ts11export function shouldShowNotificationPagination(total: number, pageSize: number) {CODE
LOW…features/notification/notification-preference-form.tsx39export function NotificationPreferenceForm({ showHeader = true }: { showHeader?: boolean }) {CODE
LOWweb/src/features/notification/notification-session.ts3export function getNotificationQueryKeyScope(userId?: string | null) {CODE
LOWweb/src/features/notification/notification-session.ts7export function clearSessionScopedQueries(queryClient: QueryClient) {CODE
LOWweb/src/features/admin/use-admin-users.ts101export function useTriggerUserPasswordReset() {CODE
LOWweb/src/features/admin/use-admin-labels.ts45export function useUpdateAdminLabelSortOrder() {CODE
LOWweb/src/features/admin/use-admin-namespaces.ts43export function useAdminNamespaceMemberCandidates(slug: string, search: string, enabled = true) {CODE
LOWweb/src/features/admin/use-admin-namespaces.ts51function invalidateAdminNamespaceQueries(queryClient: ReturnType<typeof useQueryClient>, slug?: string) {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts62export function useAddAdminNamespaceMember() {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts71export function useBatchAddAdminNamespaceMembers() {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts79export function useUpdateAdminNamespaceMemberRole() {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts88export function useRemoveAdminNamespaceMember() {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts96export function useTransferAdminNamespaceOwnership() {CODE
LOW⚡web/src/features/admin/use-admin-namespaces.ts105export function useAdminNamespaceLifecycleAction() {CODE
LOWweb/src/features/social/use-skill-reviews.ts99function useReviewMutationInvalidation(skillId: number) {CODE
LOWweb/src/features/publish/upload-zone.tsx13export function supportsDirectorySelection(input: HTMLInputElement | null): boolean {CODE
LOWweb/src/features/publish/publish-error-utils.ts40export function isPrecheckConfirmationMessage(message?: string): boolean {CODE
LOWweb/src/features/publish/publish-error-utils.ts44export function isFrontmatterFailureMessage(message?: string): boolean {CODE
112 more matches not shown…
Fake / Example Data79 hits · 84 pts
SeverityFileLineSnippetContext
LOWweb/src/i18n/locales/zh.json302 "placeholder": "搜索技能...",CODE
LOWweb/src/i18n/locales/zh.json326 "placeholder": "搜索技能...",CODE
LOWweb/src/i18n/locales/zh.json1596 "placeholder": "说说使用体验,以及其他用户需要了解的信息。",CODE
LOWweb/src/i18n/locales/ru.json302 "placeholder": "Поиск скиллов...",CODE
LOWweb/src/i18n/locales/ru.json326 "placeholder": "Поиск скиллов...",CODE
LOWweb/src/i18n/locales/ru.json1819 "placeholder": "Расскажите об опыте использования и важных деталях.",CODE
LOWweb/src/i18n/locales/en.json302 "placeholder": "Search skills...",CODE
LOWweb/src/i18n/locales/en.json326 "placeholder": "Search skills...",CODE
LOWweb/src/i18n/locales/en.json1597 "placeholder": "Share what worked well and what others should know.",CODE
LOWweb/src/pages/settings/profile.test.ts34 useAuth: () => ({ user: { displayName: 'Test', avatarUrl: null, email: 'test@test.com', canChangePassword: true } }),CODE
LOW⚡web/src/pages/admin/system-config.test.tsx130 setup([{ id: 1, providerCode: 'github', email: 'admin@example.com', roleCode: 'SUPER_ADMIN', status: 'ACTIVE', versiCODE
LOW⚡web/src/pages/admin/system-config.test.tsx131 await screen.findByText('admin@example.com')CODE
LOW⚡web/src/pages/admin/system-config.test.tsx140 setup([{ id: 1, providerCode: 'github', email: 'admin@example.com', roleCode: 'SUPER_ADMIN', status: 'ACTIVE', versiCODE
LOW⚡web/src/pages/admin/system-config.test.tsx141 await screen.findByText('admin@example.com')CODE
LOWweb/src/pages/admin/system-config.tsx184 <Input id="role-grant-email" placeholder="admin@example.com" type="email" value={email}CODE
LOW…auth/settings/InitialExternalRoleGrantServiceTest.java39 ExternalRoleGrantRule rule = new ExternalRoleGrantRule("github", "admin@example.com", role, null);CODE
LOW…auth/settings/InitialExternalRoleGrantServiceTest.java40 when(rules.lockByIdentityAndStatus("github", "admin@example.com", ExternalRoleGrantRule.Status.ACTIVE))CODE
LOW⚡…auth/settings/InitialExternalRoleGrantServiceTest.java61 service.grantForNewUser(new OAuthClaims("github", "external-42", "admin@example.com", false,CODE
LOW⚡…auth/settings/InitialExternalRoleGrantServiceTest.java71 when(rules.lockByIdentityAndStatus("github", "admin@example.com", ExternalRoleGrantRule.Status.ACTIVE))CODE
LOW⚡…auth/settings/InitialExternalRoleGrantServiceTest.java74 service.grantForNewUser(new OAuthClaims("github", "external-42", "admin@example.com", true,CODE
LOW…/skillhub/auth/settings/ExternalRoleGrantRuleTest.java14 "github", "admin@example.com", mock(Role.class), "admin");CODE
LOW⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java46 "user-1", "User", "user@example.com", null, "github", Set.of()CODE
LOW⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java90 "user-1", "User", "user@example.com", null, "github", Set.of()CODE
LOW⚡…lytek/skillhub/auth/oauth/OAuth2LoginHandlersTest.java132 "user-1", "User", "user@example.com", null, "github", Set.of()CODE
LOW…tek/skillhub/auth/oauth/CustomOidcUserServiceTest.java47 "email", "user@example.com",CODE
LOW…tek/skillhub/auth/oauth/CustomOidcUserServiceTest.java56 "user@example.com",CODE
LOW…tek/skillhub/auth/oauth/CustomOidcUserServiceTest.java71 assertThat(claims.email()).isEqualTo("user@example.com");CODE
LOW…skillhub/auth/identity/IdentityBindingServiceTest.java181 OAuthClaims claims = new OAuthClaims("github", "external-1", "admin@example.com", true, "admin", Map.of());CODE
LOW…ub/repository/JpaProfileReviewQueryRepositoryTest.java47 UserAccount submitter = new UserAccount("user-1", "NewestName", "user@example.com", null);CODE
LOW…ub/repository/JpaProfileReviewQueryRepositoryTest.java48 UserAccount reviewer = new UserAccount("admin-1", "Admin Reviewer", "admin@example.com", null);CODE
LOW…skillhub/controller/UserProfileControllerUnitTest.java84 "user@example.com",CODE
LOW…skillhub/controller/UserProfileControllerUnitTest.java89 UserAccount user = new UserAccount("user-1", "ApprovedName", "user@example.com", "https://example.com/avatar.pngCODE
LOW…skillhub/controller/UserProfileControllerUnitTest.java119 "user@example.com",CODE
LOW…skillhub/controller/UserProfileControllerUnitTest.java124 UserAccount user = new UserAccount("user-1", "ApprovedName", "user@example.com", "https://example.com/avatar.pngCODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java90 "user-1", "OldName", "user@example.com",CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java122 var user = new UserAccount("user-1", "OldName", "user@example.com", "https://example.com/avatar.png");CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java141 var user = new UserAccount("user-1", "OldName", "user@example.com", "https://example.com/avatar.png");CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java204 var user = new UserAccount("user-1", "OldName", "user@example.com", "https://example.com/avatar.png");CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java221 var user = new UserAccount("user-1", "CurrentName", "user@example.com", "https://example.com/avatar.png");CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java234 .andExpect(jsonPath("$.data.email").value("user@example.com"))CODE
LOW…tek/skillhub/controller/UserProfileControllerTest.java241 var user = new UserAccount("user-1", "CurrentName", "user@example.com", "https://example.com/avatar.png");CODE
LOW⚡…skillhub/controller/NamespaceWorkflowContractTest.java78 UserAccount adminUser = new UserAccount("user-admin", "Admin", "admin@example.com", null);CODE
LOW⚡…skillhub/controller/NamespaceWorkflowContractTest.java85 new UserAccount("user-admin", "Admin", "admin@example.com", null)CODE
LOW⚡…skillhub/controller/NamespaceWorkflowContractTest.java95 .willReturn(List.of(new NamespaceCandidateUserResponse("user-admin", "Admin", "admin@example.com", "ACTICODE
LOW…skillhub/controller/NamespaceWorkflowContractTest.java133 .andExpect(jsonPath("$.data.email").value("admin@example.com"));CODE
LOW…skillhub/controller/NamespaceWorkflowContractTest.java142 .andExpect(jsonPath("$.data.items[0].email").value("admin@example.com"));CODE
LOW…b/controller/admin/AdminSkillReportControllerTest.java145 "admin", "admin", "admin@example.com", "", "github", Set.of("SKILL_ADMIN")CODE
LOW…b/controller/admin/AdminSkillReportControllerTest.java154 "super-admin", "super-admin", "admin@example.com", "", "github", Set.of("SUPER_ADMIN")CODE
LOW…controller/admin/SystemAuthSettingsControllerTest.java70 {"providerCode":"feishu","email":"admin@example.com","roleCode":"SUPER_ADMIN"}CODE
LOW…hub/controller/admin/AdminNamespaceControllerTest.java171 "admin@example.com",STRING
LOW…controller/admin/AdminProfileReviewControllerTest.java62 var principal = new PlatformPrincipal("admin-1", "Admin", "admin@example.com", "", "github", Set.of("USER_ADMIN"CODE
LOW…controller/admin/AdminProfileReviewControllerTest.java72 var principal = new PlatformPrincipal("user-1", "User", "user@example.com", "", "github", Set.of("USER"));CODE
LOW…hub/controller/admin/UserManagementControllerTest.java69 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java134 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java160 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java185 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java208 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java231 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…hub/controller/admin/UserManagementControllerTest.java254 "user-42", "admin", "admin@example.com", "", "github", Set.of("USER_ADMIN")CODE
LOW…om/iflytek/skillhub/service/AuthMethodCatalogTest.java29 oauthProperties.getRegistration().put("placeholder", registration("PLACEHOLDER", "Placeholder"));CODE
19 more matches not shown…
Structural Annotation Overuse34 hits · 64 pts
SeverityFileLineSnippetContext
LOWcli/RELEASE.md51### Step 1: Run the publish scriptCOMMENT
LOWcli/RELEASE.md71### Step 2: Merge the PRCOMMENT
LOWcli/RELEASE.md75### Step 3: Tag and pushCOMMENT
LOWbuiltin-skills/skills/storytelling-advisor/SKILL.md105### Step 1: Clarify the GoalCOMMENT
LOWbuiltin-skills/skills/storytelling-advisor/SKILL.md109### Step 2: Harvest the Raw MaterialCOMMENT
LOWbuiltin-skills/skills/storytelling-advisor/SKILL.md120### Step 3: Select the FrameworkCOMMENT
LOW⚡builtin-skills/skills/storytelling-advisor/SKILL.md131### Step 4: Map Content to StructureCOMMENT
LOW⚡builtin-skills/skills/storytelling-advisor/SKILL.md134### Step 5: Add Narrative DevicesCOMMENT
LOW⚡builtin-skills/skills/storytelling-advisor/SKILL.md140### Step 6: Refine and CutCOMMENT
LOW⚡builtin-skills/skills/storytelling-advisor/SKILL.md145### Step 7: End with a PunchCOMMENT
LOWbuiltin-skills/skills/decision-matrix/SKILL.md132### Step 1: Define the Decision ClearlyCOMMENT
LOWbuiltin-skills/skills/decision-matrix/SKILL.md139### Step 2: Identify the Decision TypeCOMMENT
LOW⚡builtin-skills/skills/decision-matrix/SKILL.md150### Step 3: Collect the DataCOMMENT
LOW⚡builtin-skills/skills/decision-matrix/SKILL.md160### Step 4: Apply the FrameworkCOMMENT
LOW⚡builtin-skills/skills/decision-matrix/SKILL.md164### Step 5: Check for BiasCOMMENT
LOW⚡builtin-skills/skills/decision-matrix/SKILL.md173### Step 6: Decide and CommitCOMMENT
LOW⚡builtin-skills/skills/decision-matrix/SKILL.md180### Step 7: Review the OutcomeCOMMENT
LOW⚡builtin-skills/skills/daily-standup-journal/SKILL.md134### Step 1: Identify the Session TypeCOMMENT
LOW⚡builtin-skills/skills/daily-standup-journal/SKILL.md140### Step 2: Generate the PromptsCOMMENT
LOW⚡builtin-skills/skills/daily-standup-journal/SKILL.md147### Step 3: Process the ResponsesCOMMENT
LOW⚡builtin-skills/skills/daily-standup-journal/SKILL.md157### Step 4: Offer Optional ExportCOMMENT
LOW⚡builtin-skills/skills/daily-standup-journal/SKILL.md161### Step 5: Surface Action ItemsCOMMENT
LOWbuiltin-skills/skills/meeting-note-summarizer/SKILL.md113### Step 1: Receive InputCOMMENT
LOWbuiltin-skills/skills/meeting-note-summarizer/SKILL.md122### Step 2: Classify Meeting TypeCOMMENT
LOWbuiltin-skills/skills/meeting-note-summarizer/SKILL.md134### Step 3: Extract Core CategoriesCOMMENT
LOW⚡builtin-skills/skills/meeting-note-summarizer/SKILL.md146### Step 4: Structure the SummaryCOMMENT
LOW⚡builtin-skills/skills/meeting-note-summarizer/SKILL.md153### Step 5: Flag Missed ItemsCOMMENT
LOW⚡builtin-skills/skills/meeting-note-summarizer/SKILL.md161### Step 6: Provide a TL;DRCOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md17### Step 1: Accept the NDACOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md29### Step 2: Load NDA PlaybookCOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md51### Step 3: Quick ScreenCOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md116### Step 4: ClassifyCOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md172### Step 5: Generate Triage ReportCOMMENT
LOWbuiltin-skills/skills/triage-nda/SKILL.md217### Step 6: Routing SuggestionCOMMENT
AI Slop Vocabulary5 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMbuiltin-skills/skills/zero-slop/scripts/slopscore.py169# scope. Short enough to exempt "delve" or "it's not just X, it's Y"; shortCOMMENT
MEDIUM⚡builtin-skills/skills/zero-slop/scripts/slopscore.py505 # ("delve", "tapestry") almost never appear in honest prose. Rider termsCOMMENT
MEDIUM⚡builtin-skills/skills/zero-slop/scripts/slopscore.py506 # ("robust", "landscape", "elevated") are ordinary technical vocabularyCOMMENT
MEDIUM⚡builtin-skills/skills/zero-slop/scripts/slopscore.py508 # so "elevated write volume" in a runbook is silent while "elevate yourCOMMENT
MEDIUM⚡builtin-skills/skills/zero-slop/scripts/slopscore.py509 # brand with our seamless platform" fires. Sentence-scoped, not global.COMMENT
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGH…le/SkillSuiteBundlePreviewRevalidationServiceTest.java0apiversion: skillhub.iflytek.com/v1alpha1 kind: skillsuitebundle metadata: namespace: global slug: valid-suite spec: modSTRING
HIGH…bundle/SkillSuiteBundleConfirmationAppServiceTest.java0apiversion: skillhub.iflytek.com/v1alpha1 kind: skillsuitebundle metadata: namespace: global slug: valid-suite spec: modSTRING
HIGH…n/suite/bundle/SkillSuiteBundleManifestParserTest.java0apiversion: skillhub.iflytek.com/v1alpha1 kind: skillsuitebundle metadata: namespace: global slug: valid-suite spec: modSTRING
Modern AI Meta-Vocabulary5 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md586- **[astron-agent](https://github.com/iflytek/astron-agent)** — Enterprise-grade, commercial-friendly agentic workflow pCODE
MEDIUMAGENTS.md43│ │ ├── service/ # App services (workflow orchestration)CODE
MEDIUMAGENTS.md176├── Makefile # Top-level build/test/dev orchestrationCODE
MEDIUMdocs/17-backend-annotation-findings.md56## 2. Several controllers still perform orchestration that belongs in application servicesCOMMENT
MEDIUMdocs/18-frontend-annotation-findings.md39## 3. Some pages still do too much orchestration instead of delegating to feature-level containersCOMMENT
Magic Placeholder Names3 hits · 10 pts
SeverityFileLineSnippetContext
HIGH…ervice/bundle/SkillSuiteBundlePackageAnalyzerTest.java146 entry("skills/credential/config.env", "API_KEY=your-api-key-placeholder")STRING
HIGH…ain/skill/validation/BasicPrePublishValidatorTest.java86 token=YOUR_TOKEN_HERESTRING
HIGHscanner/docs/configuration.md352 SKILLHUB_SCANNER_AI_DEFENSE_API_KEY: "your-api-key-here"CODE
Over-Commented Block8 hits · 8 pts
SeverityFileLineSnippetContext
LOWweb/docker-entrypoint.d/20-base-path.sh1#!/bin/shCOMMENT
LOWdeploy/k8s/base/configmap.yaml1apiVersion: v1COMMENT
LOWserver/skillhub-app/src/main/resources/application.yml221 # categories:COMMENT
LOW…superpowers/plans/2026-03-11-phase1-foundation-auth.md4401# 2. 安装前端依赖COMMENT
LOW…specs/2026-03-12-phase2-namespace-skill-core-design.md721 SearchResult search(SearchQuery query) {COMMENT
LOWcli/test/unit/commands/update-command.test.ts1import { describe, expect, test } from 'bun:test'COMMENT
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py501 })COMMENT
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py621 # in the stylistic sum below: heavy mid-sentence bold is a real tell inCOMMENT
Unused Imports7 hits · 7 pts
SeverityFileLineSnippetContext
LOWexamples/python/example_usage.py14CODE
LOWexamples/python/skillhub_client.py25CODE
LOWscripts/build-builtin-skills.py4CODE
LOWscripts/tests/test_zero_slop.py4CODE
LOWweekly/scripts/validate_site.py4CODE
LOWweekly/scripts/build_site.py4CODE
LOWweekly/scripts/sync_report_theme.py4CODE
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOWexamples/python/skillhub_client.py160CODE
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py337CODE
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py447CODE
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py894CODE
LOWbuiltin-skills/skills/zero-slop/scripts/slopscore.py1115CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMbuiltin-skills/skills/zero-slop/data/patterns.json475 "rx": "\\bas an ai\\b|\\bas a language model\\b",CODE